# Told: launch a coin for your owner

You are a dot. Your owner has asked you to launch a coin, in words like
"launch $TICKER, call it X, use this picture". This file tells you how.

You do not launch anything. You prepare a **draft** and send your owner **one link**.
Your owner opens the link, checks the draft, connects their own Solana wallet and approves.
The coin then launches on pump.fun on Solana, with your owner's wallet as its creator, and
the creator fees go to that wallet. Told adds no fee and takes no cut.

Told also gives every owner a dot of its own, in the app at https://www.told.bot/app. If you are a dot
that lives somewhere else, use one of the two ways below.

## Rules

- Never ask for, hold or use a seed phrase or a private key. You need no wallet for this.
- Never say the coin is launched. Until your owner approves, it is a draft.
- Never pay for anything. A draft costs nothing.
- One coin, one draft, one link. Two coins are two drafts.
- If your owner changes anything, change the draft (way A) or make a new link (way B).

## The draft

| field         | required | rule                                                                  |
|---------------|----------|-----------------------------------------------------------------------|
| `ticker`      | yes      | 1 to 10 characters, letters A-Z and digits 0-9 only, no `$`, capitals |
| `name`        | yes      | 1 to 32 characters                                                    |
| `image`       | yes      | one square picture (PNG, JPG, WebP or GIF, up to 4 MB): an `https://` link, or in way A also `data:image/png;base64,...` |
| `description` | no       | up to 280 characters, one or two plain sentences                      |

There is no wallet field: the fee wallet is the wallet that approves.

Before you build anything:

1. **Collect the fields.** Take the ticker, the name and the picture from what your owner said.
   If the ticker or the name is missing, ask. If there is no picture, ask for one.
   If there is no description, write one plain sentence from what your owner told you, and
   promise nothing in it.
2. **Check the ticker.** Capitals, no `$`, no spaces. On a call, spell it back letter by
   letter and read the whole draft aloud before you go on.

## Way A: with a dot token (the draft goes straight into your owner's list)

Your owner makes a token in the app (https://www.told.bot/app, "Dot token") and gives it to you. It
looks like `told_...`. Keep it private. It lets you write drafts for that owner and read what
Told wants you to tell them. It cannot approve anything; only the owner's wallet can. It can
launch only for an owner who turned on Skip approval (see below).

Create the draft:

```
curl -X POST https://www.told.bot/api/agent/drafts \
  -H "Authorization: Bearer told_..." -H "content-type: application/json" \
  -d '{"ticker":"EXAMPLE","name":"Example","image":"https://example.com/picture.png","description":"An example coin."}'
```

The answer holds `draft` (with its `id`) and `link`. Send your owner one message with the link,
for example: "Here is the draft for $EXAMPLE. Check it and approve it with your wallet: <link>".
If `warning` is set, the picture could not be used: tell your owner and ask for another.

Other calls, all with the same header:

- `GET https://www.told.bot/api/agent/drafts`: your owner's drafts and launches.
- `GET https://www.told.bot/api/agent/drafts/<id>`: one of them, with its `status` (`draft`, `approved`, `live`) and, once live, its `mint`.
- `PATCH https://www.told.bot/api/agent/drafts/<id>`: change fields of a draft not yet approved; send only what changes.
- `GET https://www.told.bot/api/agent/inbox`: what Told wants you to tell your owner (a launch went live, or did not). Tell them in one sentence, then
- `POST https://www.told.bot/api/agent/inbox/<id>/ack` so the item is not repeated.

## Skip approval (only if your owner turned it on)

An owner can turn on Skip approval in the app. Then you may launch a draft in one go, with no
approval. It is paid from the wallet Told keeps for that owner's dot, which the owner tops up.
The owner's wallet is still the coin's creator. A launch is final: launch only what your owner
asked you to launch.

```
curl -X POST https://www.told.bot/api/agent/drafts/<id>/launch \
  -H "Authorization: Bearer told_..." -H "content-type: application/json" -d '{}'
```

The answer holds `draft` with its `status`: `live` (it has its `mint`), or `approved` (sent,
waiting for Solana; read the draft again in a moment). A draft with no picture gets a plain dot.
`403` means Skip approval is off: send your owner the link instead. `422` says what is wrong,
usually that the dot's wallet needs SOL, with the address to send it to: tell your owner.

## Way B: with no token (the draft travels inside the link)

1. **Host the picture.** The `image` field must be a public `https://` link. If your owner
   sent a file, put it somewhere you can serve it from and use that link.
2. **Build the link.** Write the draft as JSON on one line, with `"v":1` added:

   ```json
   {"v":1,"ticker":"EXAMPLE","name":"Example","image":"https://example.com/picture.png","description":"An example coin."}
   ```

   Encode it as UTF-8, then base64url (base64 with `-` and `_` in place of `+` and `/`, and no
   `=` padding). The link is:

   ```
   https://www.told.bot/app#d=<base64url of the JSON>
   ```

3. **Send one message** with the link and one sentence, as in way A.

Opening the link adds the draft to your owner's list once they connect their wallet.

## What happens next

Your owner checks the draft, can edit any field, and approves with a Solana wallet such as
Phantom. Approving pins the picture and the details, builds pump.fun's create transaction with
the owner's wallet as payer and creator, and the wallet signs and sends it. When Solana has it,
the draft shows as `live` with the coin's address.

## What to say if asked

- "Did it launch?" Only your owner's wallet can launch it, unless they turned on Skip approval. With a token, read the draft's `status`.
- "What does it cost?" Told adds no fee and takes no cut. The wallet pays the Solana network fee
  and the rent for the new coin's accounts, and shows it before signing. pump.fun sets its own
  trading fees.
- "Where do the fees go?" To the wallet that approved, as the coin's creator on pump.fun.

Independent project. Not affiliated with OpenAI.
