---
title: "Create a form (template contact, quote or blank, or your own fields); submissions land in its inbox and are emailed to notifyEmails"
method: POST
path: "/projects/{projectId}/business/forms"
tags: ["Business"]
---

# Create a form (template contact, quote or blank, or your own fields); submissions land in its inbox and are emailed to notifyEmails

`POST /projects/{projectId}/business/forms`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/projects/{projectId}/business/forms`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Path parameters

- `projectId` string, uuid, required

## Request body

- object
  - `name` string, required
  - `template` 'contact' | 'quote' | 'blank'
  - `fields` object[]
    - `name` string, required
    - `label` string, required
    - `type` 'text' | 'email' | 'textarea' | 'tel' | 'number' | 'select' | 'checkbox' | 'date', required
    - `required` boolean
    - `options` string[]
    - `placeholder` string
  - `notifyEmails` string[]
  - `successMessage` string
  - `redirectUrl` string
  - `language` 'en' | 'sv' | 'de' | 'fr' | 'es' | 'pt' | 'id' | 'da' | 'nb'
  - `retentionDays` integer
  - `allowedOrigins` string[]

## Response `201`

Created

- object
  - `id` string, uuid, required
  - `projectId` string, uuid, required
  - `name` string, required
  - `fields` object[], required
    - `name` string, required
    - `label` string, required
    - `type` 'text' | 'email' | 'textarea' | 'tel' | 'number' | 'select' | 'checkbox' | 'date', required
    - `required` boolean
    - `options` string[]
    - `placeholder` string
  - `notifyEmails` string[], required
  - `successMessage` string, nullable, required
  - `redirectUrl` string, nullable, required
  - `language` 'en' | 'sv' | 'de' | 'fr' | 'es' | 'pt' | 'id' | 'da' | 'nb', required
  - `retentionDays` integer, required
  - `allowedOrigins` string[], required
  - `status` 'active' | 'paused', required
  - `submissionCount` integer, required
  - `unreadCount` integer, required
  - `lastSubmissionAt` string, nullable, required: ISO-8601 timestamp
  - `createdAt` string, required: ISO-8601 timestamp
  - `updatedAt` string, required: ISO-8601 timestamp

## Other responses

- `400`: Invalid request (code invalid_request)
- `401`: Missing or invalid session/token (code unauthorized)
- `402`: A module limit was reached (code limit_reached)
- `403`: Authenticated but not permitted (code forbidden)
- `404`: Not found or not visible to the caller (code not_found)
- `409`: Not possible in the current state (code conflict)
- `429`: Too many requests (code rate_limited)
- `501`: Not available on this server (code not_configured)
- `503`: Stripe or the mail service did not answer (code provider_unavailable)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
