# Registration

Distinguish running, registered and listed, then enable your seller in discovery.

Source: https://docs.gyblos.com/en/sellers/register-publish

You need a running seller, the invitation's unused code and the same persistent identity created during
installation. [Install first](/en/sellers/beta-guide) if the node is not ready.

## Register

Before running the command, verify the intended `discovery.url` in `gyblos.toml` and any
`GYBLOS_DISCOVERY_URL` override in the container environment. The default is
`https://discovery.gyblos.com/v1`. Review a customized `seller.env` only in a private editor; do not print it.
Enter an invite only when you trust the configured destination.

```sh
cd ~/gyblos-seller
docker compose exec seller gyblos seller register
```

The prompt **echoes what you type**: do not screen-share, record it or paste the code into a command.
After accepting the invite, the command prints the index origin and immediately sends the invite and
public NodeId. That printed line is informational; there is no confirmation pause.

`Registered: this seller may now publish.` means discovery accepted the registration.
`Already registered` is also a success for the same invite and identity. Registration neither changes
`gyblos.toml` nor publishes the offer.

### Solana enrollment

If discovery reports missing enrollment, the interactive command can register your existing owner wallet
and NodeId on **Solana devnet**, then retry discovery automatically. The owner address printed by doctor
needs sufficient **devnet SOL** first: about 0.01 SOL, so send it about 0.02 from
[the devnet faucet](https://faucet.solana.com). If it has too little, the command names the owner and how
much more SOL it needs; in a terminal it then waits, checking the balance every 15 seconds, and continues
once the SOL arrives (Ctrl+C stops it; run it again later). The registration cost is separate from free inference; use no mainnet funds or
mainnet keys.

The command shows `Pre-simulation funding estimate:` before checking funding and simulation. It then
shows `Estimated registration cost:` and asks `Sign and submit this registration? (yes/no):`.
Only **`yes`** (or **`y`**) approves a new signed attempt. The estimate is not a fixed price: upgradeable programs
can change actual costs. If the refreshed cost increases, the command stops so you can review again.
Any other answer declines: `REGISTER_CANCELLED` means nothing was signed or sent, so run the command again.

Without an interactive terminal, `DISCOVERY_IDENTITY_NOT_REGISTERED` means rerun interactively.
`GYBLOS_INVITE` supplies the invite, not consent to a new on-chain submission. If your installed beta
image does not offer this flow, send its image identifier and your public NodeId/owner to the team.

> **Preserve an uncertain registration attempt**
>
>
> The seller saves private registration state. Rerunning checks that attempt and
> may print `Resending the previously approved registration.` before resending
> the same signed bytes without another approval prompt. An uncertain result is
> not proof of failure or zero fees. Keep the volume, registration file and
> lock. A proven expired blockhash plus finalized absent asset accounts can
> permit a replacement with the same asset and fresh consent; expiry alone does
> not prove the old attempt never landed or paid a fee. Partial or inconclusive
> state needs Gyblos assistance. Never delete state or change home to force
> another attempt.

The wallet registered in 8004 is the owner. An existing paid role may have a different payout and show
a warning; that does not change the owner. New paid roles use owner as payout, outside this free tutorial.

`DISCOVERY_INVITE_INVALID` means the code is wrong, used or expired. `DISCOVERY_RATE_LIMITED` means wait
before retrying; `DISCOVERY_UNAVAILABLE` means the index could not complete the request. See
[troubleshooting](/en/help/troubleshooting) for those errors and revoked identities.

## Publication

With the installer, turn publishing on from the folder where you saved `install.sh`:

```sh
sh install.sh publish
```

It sets `publish = true` in `~/gyblos-seller/gyblos.toml`, validates the file and recreates the seller; if
validation fails or you interrupt it, it leaves the file as it was. If you installed elsewhere, prefix the same
`GYBLOS_DIR=…` you installed with. An older `install.sh` does not know `publish`: download it again first. `gyblos seller status` also names this step while publishing
is off.

To do it by hand, edit the existing `[discovery]` table in `~/gyblos-seller/gyblos.toml`; do not add a
duplicate table:

```toml
[discovery]
publish = true
```

Validate the mounted file, then recreate the seller to apply it:

```sh
cd ~/gyblos-seller
docker compose run --rm seller gyblos config validate --config /config/gyblos.toml && docker compose up -d --force-recreate seller
```

The first command must report `OK`. Validation checks file syntax and environment resolution; startup
also checks whether the seller can serve the offer. If validation fails, correct the reported key before restarting.

### Check the listing

After the seller starts, query discovery:

```sh
cd ~/gyblos-seller
docker compose exec seller gyblos seller status --online
```

| Observation                     | What it establishes                                 |
| ------------------------------- | --------------------------------------------------- |
| `RUNNING`                       | The seller service is running                       |
| Registration succeeded          | This identity may publish to that index             |
| `listed in the index`           | The lookup found this NodeId for the queried model  |
| `not found in the index`        | The completed lookup did not find this NodeId       |
| `not in the first 2000 sellers` | The lookup budget ended; absence is not established |
| `index unreachable`             | The lookup failed; listing state is unknown         |

An index listing is not an external inference test. Only ready offers are published. The index receives
public identity, model and offer metadata; prompts are not part of this listing.

### Unlist

Run `sh install.sh unpublish`, or set `publish = false` in the same table and recreate the seller. Stopping the seller also withdraws its
presence within two minutes. Do not delete keys to leave discovery. A listing can take time to expire.

**Next:** [Adjust models and offers](/en/sellers/models-offers) or [operate your seller](/en/sellers/operate).
