EveryAPI docs everyapi.ai

Edge nodes: selling your own GPU

An edge node turns idle hardware into marketplace supply: a small agent plus Ollama, serving open models to buyers routed through the gateway. everyapi edge condenses the deployment into one command set, so nobody has to hand-copy a compose file, fill in a .env, or move a registration token around.

Requirements

The usual path

everyapi auth login
everyapi edge register --name "rtx-4090"
everyapi edge start
everyapi edge models pull llama3.1:8b
everyapi edge status
everyapi edge logs -f
everyapi edge update
everyapi edge remove

Full command surface

everyapi edge register [--name N] [--country CC] [--attach-to-channel ID]
everyapi edge start    [--mode auto|nvidia|rocm|macos|cpu] [--node ID]
everyapi edge status   [--node ID]   compose ps plus the dashboard view
everyapi edge stop     [--node ID]
everyapi edge logs     [-f] [--node ID]
everyapi edge models   {list | pull <m> | rm <m>} [--node ID]
everyapi edge update   [--node ID]   docker compose pull && up -d
everyapi edge rename   --name NEW [--country CC] [--region R] [--node ID]
everyapi edge pause    [--node ID]   Manual disable, sticky
everyapi edge resume   [--node ID]   Clear the manual pause
everyapi edge list                   Nodes on the active backend
everyapi edge remove   [--node ID] [--keep-backend]

pause is sticky on purpose: a node stays out of routing until resume, rather than rejoining on the next heartbeat. That is what makes it usable for "I need this machine back for a few hours".

Hardware detection

start detects the accelerator and renders the compose file at runtime from a template — not from a static embedded YAML — for two reasons: container names are namespaced by node id, so several nodes on one host do not collide, and GPU passthrough differs per mode.

nvidia  deploy.resources.devices plus the nvidia driver
rocm    /dev/kfd and /dev/dri plus group_add: video
macos   no ollama container; the agent uses the host's native ollama
cpu     no accelerator

Override the detection with --mode.

How the registration token is handled

register calls the backend with your existing sk-everyapi-… bearer. The backend returns a registration_token exactly once, then stores only its SHA-256 and never displays it again. The CLI writes it mode 0600 to ~/.local/share/everyapi/edge/<id>/node.json (parent directory 0700) and renders it into the compose environment at start time.

The token is deliberately never written to a .env file. .env files get committed.

Attaching to an existing channel

--attach-to-channel <id> pairs a new node with a channel you already own instead of minting a new one. The id must appear as channel_id on one of your existing nodes; the CLI validates that before calling the backend so an invalid id gets a message naming your actual channels rather than a bare rejection.

Removal

remove runs docker compose down -v, deletes the local node directory, and deletes the backend row. --keep-backend skips the last step. When the removed node was the last one on its paired channel, the channel goes with it.

Through an AI agent

The MCP server exposes everyapi_edge_list and everyapi_edge_status read-only, and everyapi_edge_remove behind a required confirm: "yes". See the mcp topic.