> ## Documentation Index
> Fetch the complete documentation index at: https://www.openpmm.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an account from an agent

> Create an OpenPMM signup link, then verify the requested email in your browser.

An agent can prepare your first OpenPMM Workspace. The user must finish
authentication in a browser. The signup request does not need an API key.

## Use the CLI

The CLI is the shortest path because the same browser flow creates the account,
approves the CLI, and selects the Workspace.

```bash theme={null}
openpmm signup create \
  --email publisher@example.com \
  --workspace-name "Product Marketing" \
  --authorize-cli
```

The command returns the signup URL immediately. After browser approval, finish
the pending authorization and store the credential locally:

```bash theme={null}
openpmm auth login --resume
```

## Create a signup link through the API

Send the email address and Workspace name.

```bash theme={null}
curl --request POST \
  --url https://api.openpmm.com/v1/signup-intents \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "publisher@example.com",
    "workspace_name": "Product Marketing"
  }'
```

The response contains a short-lived `signup_url` and its expiry time.

```json theme={null}
{
  "object": "signup_intent",
  "signup_url": "https://app.openpmm.com/signup/...",
  "expires_at": "2026-08-18T12:30:00.000Z"
}
```

Open `signup_url` in a browser. Continue with Google or create an account with
the requested email address and a password. The verified email address must
match the signup request. If that address already has an OpenPMM identity,
select **Sign in** on the signup page instead.

<Note>
  OpenPMM creates the Workspace only after email verification. The request does
  not include an Account name or website URL because neither is part of the
  customer-facing Workspace setup.
</Note>

To authorize a CLI without handling an API key, call
`POST /cli-authorizations`, open its `verification_uri_complete`, then poll
`POST /cli-authorizations/token` with the device secret. A successful exchange
returns the API key once. The authorization response includes `sensitive: true`.
Treat the one-time URL and device secret as credentials.
