# Cube early access

> Sign a person up for early access to Cube's agent-native forms (forms people fill on the page and AI agents fill over HTTP or MCP, with the owner approving what agents send).

Agent-native forms: people fill the page, agents fill it without opening it.

This is a form you can fill in for a person without opening a browser. Its fields are `name`, `email`, `use`, `website` (`name`, `email`, `use` required). Answers sent by an agent are held until the form's owner approves them, so say who you are and who you are filling it in for.

**Only send what your person told you. Ask them for any required answer you do not have, and never tick a consent box or answer a demographic question for them unless they told you to.**

## How to fill it

1. **If you can send HTTP requests:** `POST https://ui.usecube.io/f/early-access` with a JSON body `{"answers": {...}, "agent": {"name": "...", "model": "..."}, "on_behalf_of": "..."}`. Details below.
2. **If you have the Cube MCP connector** (`https://ui.usecube.io/mcp`): call `submit_form` with `id: "early-access"`, `answers` and `on_behalf_of`; or `prefill_link` with `id` and `answers` to get the link for your person (a file cannot ride in it; they attach it on the page).
3. **If you can't do either (a chatbot):** give your person this link with the answers filled in, each one URL-encoded (lists and objects as JSON). They check it and press Submit themselves:

   ```
   https://ui.usecube.io/f/early-access#name=...&email=...&use=...&website=...
   ```

   For example: https://ui.usecube.io/f/early-access#name=Jane%20Doe&email=jane%40example.com&use=...&website=https%3A%2F%2Fexample.com

## Fields

- **name** (string, up to 200 characters, required): The person's full name.
- **email** (string, email, required): The person's email address, where Cube will write to them.
- **use** (string, up to 5,000 characters, required): What the person would use agent-native forms for, in their own words. A sentence or two is plenty.
- **website** (string, URL): The person's or their company's website, if they have one.

## Submit over HTTP

`POST https://ui.usecube.io/f/early-access` with `Content-Type: application/json`:

```json
{
  "answers": {
    "name": "Jane Doe",
    "email": "jane@example.com",
    "use": "...",
    "website": "https://example.com"
  },
  "agent": {
    "name": "Claude",
    "model": "claude-sonnet-4-5"
  },
  "on_behalf_of": "Jane Doe"
}
```

`answers` is required. `agent` (your name, and your model if you know it) and `on_behalf_of` (the person) are optional, but the owner approves faster when they can see who sent it.

```sh
curl -X POST https://ui.usecube.io/f/early-access \
  -H 'Content-Type: application/json' \
  -d '{"answers":{"name":"Jane Doe","email":"jane@example.com","use":"...","website":"https://example.com"},"agent":{"name":"Claude","model":"claude-sonnet-4-5"},"on_behalf_of":"Jane Doe"}'
```

A success is `201 Created`:

```json
{ "id": "s_...", "status": "working", "metadata": { "review": "pending", "message": "Received and waiting for the form owner's approval. It counts once approved." }, "receipt_url": "https://ui.usecube.io/s/..." }
```

`status` uses A2A's task states: `working` means it is waiting for the owner to approve it (tell your person it was sent and is waiting for approval); once decided it is `completed` (approved) or `rejected`. `receipt_url` is your person's own view of what was sent; give it to them.

A mistake is `400 Bad Request` with an `errors` list, each `{ "field", "message" }` saying what to send instead. Fix those answers and send again. `429 Too Many Requests` means wait the `Retry-After` seconds.

## Other formats

- [JSON Schema of the answers](https://ui.usecube.io/f/early-access.json)
- [This page as Markdown](https://ui.usecube.io/f/early-access.md)
- MCP (Streamable HTTP): `https://ui.usecube.io/mcp`, tools `list_forms`, `read_form`, `submit_form`, `prefill_link`, `draft_form`.
- In a browser with WebMCP, the page's form is the tool `sign_up_for_cube_early_access`.
