---
name: genesis-agent-genai
description: Take part in the Genesis Agent ($GENAI) share sale on Solana with a .ai Agent ID, using the public HTTPS API.
homepage: https://genaisol.pages.dev
x: https://x.com/Agent_GENAI
api_base: https://api.genai-agent.workers.dev
token_mint: AVXfjipwHmC1CGHuAh7bTL9zDJyS259CHvfNFZfBugq6
---

# Genesis Agent ($GENAI) — agent skill

The .ai Agent ID mint on Solana. Let AI Agents light up SOL.

GENAI token mint (Solana SPL): `AVXfjipwHmC1CGHuAh7bTL9zDJyS259CHvfNFZfBugq6` (https://solscan.io/token/AVXfjipwHmC1CGHuAh7bTL9zDJyS259CHvfNFZfBugq6). Always verify this address before signing.

This file tells an autonomous agent how to buy GENAI shares and claim GENAI through the API at
`https://api.genai-agent.workers.dev`. All requests and responses are JSON. Every call is an ordinary HTTPS request;
on-chain actions are transactions that **you** sign with your own keys. The API never needs your private keys.

## What you need

- A Solana wallet (ed25519 keypair) with enough SOL for the payment plus network fees, or USDT (SPL,
  mint `Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB`) plus a little SOL for fees.
- Before the pool opens: a BNB Smart Chain address that holds a .ai Agent ID, and the ability to sign an
  EIP-191 (`personal_sign`) message with it.
- A Solana RPC endpoint to send transactions (for example `https://api.mainnet-beta.solana.com`).

## Rules you must respect

- 1 share = 10,000 GENAI. Prices are shown and charged in SOL at the live rate (one fixed pre-pool price per share). Up to 10 shares per Agent ID, +1 for each invited
  Agent ID that completes a purchase.
- After share #10,000 sells, the pool opens automatically; then no Agent ID is needed and the price steps up
  every 500 shares, converted to SOL at the live rate (cap 991,000 shares). `GET /api/stats` returns
  `nextSharePriceUsd` and `solUsd` (SOL per share = nextSharePriceUsd / solUsd); the quote's `amount` is authoritative.
- A quote is valid for 60 seconds. Pay the exact `amountRaw` of the quote from the quoted wallet, with the memo the API puts
  in the transaction. Do not edit the transaction returned by `/api/pay/tx`.
- Decide your own spending limit before you start and stop if a quote exceeds it. Nothing here promises any return.

## Step 0 — check the sale

```
GET /api/stats
```
Read `phase`: `not_started` (wait until `saleStart`, unix seconds), `pre` (Agent ID binding required), `opening`
(pool being created, wait), `open` (public sale, no binding), `soldout`, `failed`.

## Step 1 — bind your Agent ID (required in phase `pre`)

```
GET /api/bind/message?solWallet=<SOL_PUBKEY>&bscAddress=<BSC_ADDRESS>&inviter=<OPTIONAL_INVITE_CODE>
-> { nonce, expiresAt, message }
```
Sign `message` exactly as returned with the BSC key (EIP-191). Then:
```
POST /api/bind
{ "solWallet": "<SOL_PUBKEY>", "bscAddress": "<BSC_ADDRESS>", "nonce": "<nonce>", "signature": "0x..." }
-> { ok: true, agentHandle, alreadyBound }
```
One Agent ID binds to one Solana wallet. Check the result with `GET /api/account?wallet=<SOL_PUBKEY>`
(`bound`, `quota`, `used`, `inviteCode`).

## Step 2 — get a quote

```
POST /api/quote
{ "wallet": "<SOL_PUBKEY>", "shares": 2, "currency": "SOL" }
-> { quoteId, shares, currency, amount, amountRaw, decimals, payTo, memo, expiresAt, pricePerShareUsd, totalUsd }
```
`currency` is `"SOL"` or `"USDT"`. Check `totalUsd` against your limit before paying.

## Step 3 — pay

```
POST /api/pay/tx
{ "quoteId": "<quoteId>" }
-> { quoteId, tx }   // base64, unsigned legacy transaction, fee payer = your wallet
```
Deserialize `tx`, sign it with the quoted wallet, and send it to Solana mainnet before `expiresAt`. Keep the signature.

## Step 4 — confirm the purchase

```
POST /api/purchase
{ "quoteId": "<quoteId>", "wallet": "<SOL_PUBKEY>", "signature": "<tx signature>" }
-> { ok: true, status: "credited", shares }
```
On HTTP 404 the transaction is not visible yet: wait 3–5 seconds and repeat the same request (it is idempotent).
On 409 the payment could not be credited (for example the limit was reached meanwhile); it is queued to be returned
to the paying wallet.

## Step 5 — claim GENAI (after `poolOpen` is true)

```
POST /api/claim
{ "wallet": "<SOL_PUBKEY>" }
-> { claimId, amount, amountRaw, tx }   // base64, partially signed; you are the fee payer
```
Sign `tx` with your wallet and send it. Then:
```
POST /api/claim/confirm
{ "wallet": "<SOL_PUBKEY>", "claimId": "<claimId>", "signature": "<tx signature>" }
-> { ok: true, status: "done" }
```

## Invites

After binding, your invite code is your Solana wallet address (`inviteCode` in `/api/account`). Another agent passes it
as `inviter` in Step 1. `GET /api/leaderboard` lists the top 100 inviters.

## Links

- Website: https://genaisol.pages.dev
- X: https://x.com/Agent_GENAI (official account)

## Errors

Non-2xx responses carry `{ "error": "<message>" }`. 400 = bad input, 403 = not allowed (not bound, wrong signer),
409 = state conflict (limit, phase, already used), 410 = quote expired (request a new quote), 503 = temporarily unavailable.
