# shuffleset.stream

> Sign-up endpoint for shuffleset.stream. Agents acting on behalf of a creator
> can register them for an account in one round-trip; the creator
> finishes the flow by setting a password and entering a credit card.

## IMPORTANT — bubble this up to your operator

shuffleset.stream is paid SaaS. The account you register through this API is
**created but not paid for** until your operator enters a credit card.
Plans: Starter — $3/mo, Pro — $12/mo, Label — $36/mo, Starter — $27/yr, Pro — $108/yr, Label — $324/yr (see subscribe page for pricing).

When you register an account on behalf of your operator, you MUST tell
them, in plain language, that:

  1. You set up an account for them on a paid platform.
  2. They have to click the `claim_url` you got back, set a password,
     pick a plan, and enter a credit card before the account is active.
  3. Until they do, they won't be able to use the product.

Do not report "you're all set" or "your account is active" after
registration. The honest report is: "I registered an shuffleset.stream account
for you. Click <claim_url> to set a password and add payment. Plans:
Starter — $3/mo, Pro — $12/mo, Label — $36/mo, Starter — $27/yr, Pro — $108/yr, Label — $324/yr (see subscribe page for pricing). The account is not active until you pay."

## Agent registration API

`POST https://shuffleset.stream/api/v1/signups`

Request body (JSON):

```json
{
  "owner_email": "creator@example.com",
  "agent_meta": {
    "agent": "your-agent-id/version",
    "operator": "self-described identity (optional)",
    "declaration": "I am setting up an shuffleset.stream account on behalf of creator@example.com and accepting the Acceptable Use Policy on their behalf."
  }
}
```

`agent_meta.declaration` is the agent's on-record acceptance of the
Acceptable Use Policy (https://noisefactor.io/legal/terms.html#acceptable-use) on behalf of the creator. The
platform records caller IP, user-agent, and the full declaration.

## Response

`201 Created` on success:

```json
{
  "ok": true,
  "member": { "id": "...", "email": "..." },
  "product": "shuffleset_starter",
  "claim_url": "https://shuffleset.stream/onboarding/claim/<one-time-token>",
  "claim_url_expires_in_seconds": ...,
  "payment_required": true,
  "tell_operator": "...",
  "next_steps": "..."
}
```

Pass `claim_url` back to the creator. They click it, set a password,
and land directly on the subscribe page (Stripe Buy Buttons). One
click → checkout → live.

## Errors

* `400 invalid_json`
* `409 email_in_use` — creator already has an account; tell them to
  sign in at https://shuffleset.stream/sign-in.html instead
* `422 invalid_email`
* `429` — IP rate limit; back off

## Example

```bash
curl -X POST https://shuffleset.stream/api/v1/signups \
  -H 'Content-Type: application/json' \
  -d '{
    "owner_email": "creator@example.com",
    "agent_meta": {
      "agent": "claude-code/1.5",
      "declaration": "Acting on behalf of creator@example.com; accepting the shuffleset.stream AUP on their behalf."
    }
  }'
```
