# When you cannot call the API

What to do if you can only GET, or have no network at all: compose the page JSON and hand the person a one-click link to /new that creates it in their browser.

## Decide what you can do

| You can… | Then |
| --- | --- |
| make HTTP POST requests (code execution with network, an HTTP tool, MCP) | Do everything yourself: check, validate, create, verify, hand over. No account, key or approval is needed to create a page. Do not ask the person to run commands. |
| only fetch pages (GET), or read this documentation but not send a body | Read the docs, ask the person the questions, compose the JSON body, and give them a **one-click link** (below) plus the JSON itself. |
| not reach the network at all | Compose the JSON from the schema in the prompt you were given and give the person the link and the JSON. They open the link; the page is validated and previewed there before anything is created. |

## The one-click link

`https://tapmy.link/new?p=<payload>` where `<payload>` is the request body of [POST /api/agent/pages](https://tapmy.link/documentation/agents/quickstart.md) — the same JSON — encoded as **base64url** (RFC 4648 §5: `+`→`-`, `/`→`_`, no padding). The person opens it in a browser and sees a preview of the page on a phone, the address (editable, checked live), and an e-mail and password field. One tap creates the account and the page and lands them in the dashboard. Nothing is created until they tap.

```text
https://tapmy.link/new?p=eyJ1c2VybmFtZSI6ImFubmEtYmFrZXMiLCJwYWdlIjp7ImRpc3BsYXlOYW1lIjoiQW5uYSBCYWtlcyIsImJpbyI6IlNvdXJkb3VnaCBhbmQgU2F0dXJkYXkgbWFya2V0cy4iLCJibG9ja3MiOlt7InR5cGUiOiJsaW5rIiwibGFiZWwiOiJPcmRlciBicmVhZCIsInVybCI6Imh0dHBzOi8vYW5uYWJha2VzLmV4YW1wbGUvb3JkZXIiLCJmZWF0dXJlZCI6dHJ1ZX1dfX0
```

That link decodes to:

```json
{ "username": "anna-bakes", "page": { "displayName": "Anna Bakes", "bio": "Sourdough and Saturday markets.",
    "blocks": [ { "type": "link", "label": "Order bread", "url": "https://annabakes.example/order", "featured": true } ] } }
```

- Keep the link under about 8 000 characters — roughly a page with fifteen blocks. Beyond that, send the JSON and point the person at `https://tapmy.link/new` with no parameter: it has a box to paste into.
- `username` may be left out; the person chooses it on the page. `email` and `password` are never part of the link — the person types them.
- `avatarUrl` works in the link too: the photo is fetched when the page is created.
- Everything is validated on the page with the same rules as the API, and problems are shown next to the field they concern.

## What to send the person

```text
Here is your page, ready to create — open this link, check the preview, choose a password and tap Create:
https://tapmy.link/new?p=…

If the link does not open, go to https://tapmy.link/new and paste this:
{ …the JSON… }
```

## What you lose without the API

Nothing on the page. What you cannot do is verify the result yourself (`page.md`) or edit it later — the person does that in the dashboard, or gives you an API key from their account settings and you do it with `PATCH`. Since the person created the account in their browser, there is no claim link; the account is theirs from the start.

> If you can GET but not POST, you can still read `https://<name>.tapmy.link/page.md` after the person has created the page, and tell them what you would change.

---
Part of the [Tapmy.link agent documentation](https://tapmy.link/documentation/agents.md). Canonical: https://tapmy.link/documentation/agents/no-network.md
