# kikopod > A dedicated public IPv4 address, operated entirely over SSH. €15 a month, > VAT included. kikopod sells one static IPv4 address per customer from a block it owns (185.104.32.0/21). There is no web dashboard, no password and no API token: the customer's SSH key is the account, and every operation is a command over SSH. This makes the service operable by a person, a script, or an AI agent holding its own key. ## How it works - Sign up: the homepage issues a one-shot token; running `ssh @get.kikopod.com` allocates an address and waits for a registration key. Today registration keys are issued by the operator; purchase inside the session is not yet automated, so an agent cannot complete signup unattended. - Everything after activation is `ssh `. The user name is ignored; the key identifies the account. - `ssh help` prints the complete, current command list. It is the authoritative API reference and is always in sync with the server. ## Commands (summary; `help` is authoritative) - Publish a static site: `sftp `, `rsync -az ./ :`, or `git push :site HEAD:main`. Each upload is an atomic versioned release. - `versions`, `rollback [vN]` — list releases, roll back. - On publish, every file is hashed and compared against a corpus of known malware samples. A match means that version is not published and the previously live one stays live; the customer is told which file and hash, on the spot and by mail. It is a hash comparison, not an inspection of content. It never refuses a deploy because the corpus is empty, stale or unreadable — the upload publishes and is recorded as unscanned — and rollbacks are never checked. A pod can be exempted on request, for customers with a reason to serve samples. - `domain add ` / `domain rm ` — serve your own hostname; ownership is proven by its A record pointing at the address. HTTPS is automatic. One exception: a name this address served for a different account before is asked for a `_kikopod.` TXT record as well, because the previous holder's A record may still point here and a record they forgot proves nothing. The command prints what to create. - `ptr ` / `ptr clear` — set reverse DNS (forward-confirmed). - `wireguard` — print a WireGuard config that routes the whole address to your own machine (all ports, TCP and UDP). The address then follows the tunnel: `wg-quick up` and it is yours within a minute, `wg-quick down` and the platform serves the site again a few minutes later. Neither needs telling the platform. A config that is never brought up does not move the address at all. Reclaim is measured from the last WireGuard handshake, not from traffic, and the issued config sets `PersistentKeepalive = 25`, so an idle tunnel is never quiet. See `web` for the case where reclaim is switched off entirely. - Every pod also gets a management port of its own on a shared endpoint: `ssh -p pods.kikopod.com`. The `wireguard` command prints the pod's port when it issues the config. This is how to reach the platform about a pod whose address is routed to a WireGuard tunnel, and it works from the tunnelling machine itself, where the address is a local interface and packets to it never leave. - `wireguard off` — revoke: the issued config stops working permanently and the key is forgotten. For a lost or untrusted machine. It is not a pause; `wg-quick down` is the pause. - `wireguard status` — whether a key is registered, and what happens next. - `web` / `web off` / `web on` — stop or resume serving on 80/443. With the page off, a quiet WireGuard tunnel no longer has its address reclaimed: there is nothing to serve on it, so the address stays on the customer's machine until `web on` or `wireguard off`. This is the setting for an address running something that is not a website. - `keys` / `keys add ` / `keys agent ` / `keys rm ` — manage the SSH keys that can operate the pod. Four scopes, a verb each: `keys add` (owner, everything), `keys agent` (all but key management and terminate), `keys deploy` (publish, roll back, read), `keys read` (read only). A verb rather than a flag, so a forgotten flag cannot hand out a full key. An agent key can still route the address away over WireGuard. Only owner keys count as the spare that makes a lost credential survivable, because no other scope can add a key. - `health` — network, web, tls, disk, traffic, wireguard and domains, each read from the thing it describes; a line that cannot be read says so rather than guessing. - `usage` — disk usage against the limit. - `email` / `email
` / `email ` / `email clear` — the address we use to reach you, and whether it is confirmed. Setting one sends a confirmation code to it, which is typed back with `email `. Rate limited: 5 mails and 3 distinct addresses per account per day. It is never a way in; there is no login and no recovery by mail. - `terminate` / `terminate ` — give this pod up. Bare `terminate` prints what will happen and refuses; confirming means repeating the pod's own address, since a script cannot be asked a yes/no question. Not named `close`, which SSH already uses for connections. A pod is terminated; an account is closed, and terminating an account's last pod does both. `reopen` undoes all of it for 7 days, after which the files, keys, contact address and domains are deleted and the address returns to the pool at 30 days. - `reopen` — undo a terminate. A terminated pod authenticates the same keys and answers this one command and nothing else. Reverse DNS and custom domains are not restored; set them again. - `say ""` — send a message to the operator: a bug, a feature request, anything. Also reads stdin when given no argument. Arrives attached to the account by the key that sent it. This is the support channel; there is no inbox and no ticket form. An agent may use it with its own key. Limit: 8 KB, 10 messages per account per day. ## Constraints worth knowing - One agent key per agent is the recommended pattern (`keys agent`). There is no password and no account recovery by design; keep at least one key a human holds. - Traffic: 1 TB a month per address, in and out together, metered by the platform and reported by `usage` and `health`. Never billed for overage. - Price is €15/month or €150/year, both VAT inclusive. A business with an EU VAT number pays the net amount and supplies the number at checkout. - Vocabulary: a *pod* is one customer's dedicated IPv4 address and everything attached to it. The *address* is the resource; *pod* is the thing you operate. A pod is terminated; an account is closed. - Mail: inbound port 25 works, outbound port 25 is dropped. A pod routed to the customer's machine over WireGuard can receive mail and be a domain's MX; it cannot deliver mail directly and must relay through an SMTP provider on 587 or 465, which are open. This is deliberate: one spamming address would cost every other customer in the block the clean reputation they pay for. Reverse DNS is customer-set and forward-confirmed. ## Connecting Every kikopod SSH endpoint — `get.kikopod.com`, a pod's own address on port 22, and a pod's management port on `pods.kikopod.com` — presents the same host key: ED25519 SHA256:OgrPY5flSzqJnOT1iyftrRyJrmchXJFhDZYhds16ntg Port 22 of `pods.kikopod.com` is the operator's own machine, not a customer endpoint, and answers with a different key. ## Status https://status.kikopod.com — hosted away from the platform so it can be read when the platform cannot. Written by a person during an incident, and links an external uptime monitor that updates itself. ## Reaching a human Use `say`. There is no support email address to write to, and no form. ## Pages - https://kikopod.com/ — overview - https://kikopod.com/how/ — how it works, with real sessions - https://kikopod.com/docs/ — the reference: every command in detail, the limits, and what the platform deliberately does not do - https://kikopod.com/pricing/ — what €15 includes