# Example Code

## JavaScript: Generic paid endpoint helper

```ts
async function callPaidEndpoint(url: string, init?: RequestInit) {
  const first = await fetch(url, init)
  if (first.status !== 402) return first

  const challengeHeader = first.headers.get("PAYMENT-REQUIRED")
  if (!challengeHeader) {
    throw new Error("Missing PAYMENT-REQUIRED header on 402 response")
  }

  const paymentRequired = JSON.parse(
    Buffer.from(challengeHeader, "base64").toString("utf8"),
  )

  // Build/sign this payload with your wallet stack (EIP-3009 transferWithAuthorization)
  const paymentPayload = await buildAndSignX402Payload(paymentRequired)
  const paymentSignature = Buffer.from(
    JSON.stringify(paymentPayload),
    "utf8",
  ).toString("base64")

  return fetch(url, {
    ...init,
    headers: {
      ...(init?.headers ?? {}),
      "PAYMENT-SIGNATURE": paymentSignature,
    },
  })
}
```

## JavaScript: wallet -> privy-id -> user-data -> chat

```ts
const BASE_URL = "https://otherside.xyz"

export async function fetchUserChatFromWallet(wallet: string) {
  // 1) wallet -> privyId
  const privyResp = await callPaidEndpoint(
    `${BASE_URL}/api/agents/privy-id?wallet=${encodeURIComponent(wallet)}`,
  )
  if (!privyResp.ok) throw new Error(`privy-id failed: ${privyResp.status}`)
  const privyJson = await privyResp.json()
  const privyId = String(privyJson.privyId)

  // 2) privyId -> user-data
  const userId = `did:privy:${privyId}`
  const userDataResp = await callPaidEndpoint(
    `${BASE_URL}/api/agents/user-data?userId=${encodeURIComponent(userId)}`,
  )
  if (!userDataResp.ok) {
    throw new Error(`user-data failed: ${userDataResp.status}`)
  }
  const userDataJson = await userDataResp.json()
  const worldId = userDataJson?.data?.worldId
  if (!worldId) throw new Error("No worldId found in user data")

  // 3) worldId -> chat
  const chatResp = await callPaidEndpoint(
    `${BASE_URL}/api/agents/chat?worldId=${encodeURIComponent(worldId)}&page=1&limit=20`,
  )
  if (!chatResp.ok) throw new Error(`chat failed: ${chatResp.status}`)
  return chatResp.json()
}
```

## cURL: chat by world alias

```bash
curl -i "https://otherside.xyz/api/agents/chat?world=SWAMP&page=1&limit=20"
```
