# Zero Forms – Create Hosted Web Form

> Zero Forms – Create Hosted Web Form is a free API for AI agents from forms.withzero.xyz, callable via MPP, free · handshake required, status healthy (last checked 2026-09-14, last successful call 2026-09-06).

Creates a hosted web form from a JSON Schema definition and returns a public URL where respondents can fill it in, with submissions emailed to specified recipients.

## Facts

- Endpoint: POST https://forms.withzero.xyz/api/v1/forms
- Price: free · handshake required
- Payment: MPP
- Status: healthy
- Last checked: 2026-09-14
- Last successful call: 2026-09-06
- Success rate: 92% of calls made through Zero
- Rating: 4.9 / 5 from 8 reviews
- Activations on Zero: 44
- Provider: forms.withzero.xyz
- Website: https://forms.withzero.xyz
- Canonical page: https://www.zero.xyz/c/forms-withzero-xyz-zero-forms-create-hosted-web-form-5ca42e76
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_sz1qqbI6ZQhjQtEyS0FdH

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability forms-withzero-xyz-zero-forms-create-hosted-web-form-5ca42e76 -d '<json body>'
```

Example prompt: Create a hosted web form called 'Customer Feedback Survey' with fields for full name (text), email address, overall satisfaction rating (1–5), and additional comments (text), and send submission notifications to feedback@mycompany.com.

## When to prefer this

Use this endpoint when an AI agent needs to collect structured data from humans via a browser-accessible form without building any frontend UI. Ideal when the form fields are already expressible as a JSON Schema (rjsf-compatible) and you want respondents to receive a simple public URL. Prefer this over general form builders when operating in an agentic workflow that can programmatically define field schemas and route submission notifications to email addresses.

## Known failure modes

- Invalid JSON Schema in 'schema' field — returns 400 with validation error
- No recipients provided or recipients array is empty — returns 400 (minItems: 1 violation)
- More than 20 recipients specified — returns 400 (maxItems: 20 violation)
- Malformed email address in recipients — returns 400 with pattern validation error
- Title exceeds 200 characters — returns 400
- Missing required 'schema' or 'recipients' fields — returns 400

## How this service works

Create a hosted web form from a field schema and get a public URL where it can be filled in.

## Output

Returns a JSON object with a 6-character form ID, a public URL (e.g. https://forms.withzero.xyz/#abc123) where the form can be filled in by anyone, and a submit endpoint URL that the rendered form posts responses to.

## Example request

```json
{
 "title": "Customer Feedback Survey",
 "schema": {
  "type": "object",
  "required": [
   "name",
   "email",
   "rating"
  ],
  "properties": {
   "name": {
    "type": "string",
    "title": "Full Name"
   },
   "email": {
    "type": "string",
    "title": "Email Address",
    "format": "email"
   },
   "rating": {
    "type": "integer",
    "title": "Overall Satisfaction",
    "maximum": 5,
    "minimum": 1
   },
   "comments": {
    "type": "string",
    "title": "Additional Comments"
   }
  }
 },
 "recipients": [
  "zero-qa@agentmail.to"
 ]
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "schema",
  "recipients"
 ],
 "properties": {
  "title": {
   "type": "string",
   "maxLength": 200,
   "description": "Optional heading shown above the form."
  },
  "schema": {
   "type": "object",
   "description": "JSON Schema describing the form fields (rjsf-compatible).",
   "propertyNames": {
    "type": "string"
   },
   "additionalProperties": {}
  },
  "webhook": {
   "type": "object",
   "required": [
    "url"
   ],
   "properties": {
    "url": {
     "type": "string",
     "format": "uri",
     "description": "Each submission is POSTed here (HMAC-signed), alongside the email notification."
    },
    "secret": {
     "type": "string",
     "maxLength": 256,
     "minLength": 8,
     "description": "HMAC secret. Required when the receiver verifies signatures — e.g. an inbox generic connection."
    }
   },
   "description": "Optional delivery webhook. Point it at an inbox connection URL to flow submissions into an agent inbox.",
   "additionalProperties": false
  },
  "uiSchema": {
   "type": "object",
   "description": "Optional rjsf UiSchema for widget hints and ordering.",
   "propertyNames": {
    "type": "string"
   },
   "additionalProperties": {}
  },
  "recipients": {
   "type": "array",
   "items": {
    "type": "string",
    "format": "email",
    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
   },
   "maxItems": 20,
   "minItems": 1,
   "description": "1–20 email addresses notified on each submission."
  }
 },
 "additionalProperties": false
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "id",
  "url",
  "submitUrl"
 ],
 "properties": {
  "id": {
   "type": "string",
   "description": "6-character form id."
  },
  "url": {
   "type": "string",
   "format": "uri",
   "description": "Public URL where the form renders."
  },
  "submitUrl": {
   "type": "string",
   "format": "uri",
   "description": "Endpoint the rendered form POSTs submissions to."
  }
 },
 "additionalProperties": false
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/forms-withzero-xyz-zero-forms-create-hosted-web-form-5ca42e76/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from forms.withzero.xyz](https://www.zero.xyz/host/forms.withzero.xyz/llms.txt)
