# Twitter

OpenAPI spec: [https://api.payweave.app/app/app_wjm8s6leokzeu3zq95y45arx/openapi.json](https://api.payweave.app/app/app_wjm8s6leokzeu3zq95y45arx/openapi.json)

## Networks

| Name | Mode | CAIP-2 | Chain ID / Cluster | Protocols |
|---|---|---|---|---|
| Tempo Mainnet | live | `eip155:4217` | 4217 | mpp |
| Solana Mainnet | live | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | mainnet-beta | mpp, x402 |
| Base | live | `eip155:8453` | 8453 | x402 |

## Accepted Currencies

| Symbol | Name | Decimals | Network | Address | Protocols |
|---|---|---|---|---|---|
| USDC.e | Bridged USDC (Stargate) | 6 | `eip155:4217` | `0x20c000000000000000000000b9537d11c60e8b50` | mpp |
| USDC | USD Coin (Solana) | 6 | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` | mpp, x402 |
| USDC | USD Coin | 6 | `eip155:8453` | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | x402 |

## Endpoints (29)

### Twitter: Article by ID

Retrieve the full content of an X Article by the tweet ID of the post that hosts it. Returns article title, preview text, cover image, publish date, and full article content as Markdown (headings, bold, italic, lists, images). Not available in the official X API.

- Method: GET
- Path: `/articles/by/id`
- Price: $0.00200000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric tweet ID of the article post, e.g. 2010751592346030461"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "article": {
      "type": "object",
      "additionalProperties": {},
      "description": "Article object: title, preview text, cover image, publish date, content blocks."
    },
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "description": "X Article JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/articles/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/articles/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/articles/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/articles/by/id" --json '{"id":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/articles/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/articles/by/id" -m GET -b '{"id":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/articles/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/articles/by/id" -m GET -b '{"id":""}' -p x402
```

### Twitter: All-Community Search

Search the latest posts across all X Communities by keyword, with author profiles. Query params: query (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/communities/all-posts`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search keyword or phrase."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/communities/all-posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/communities/all-posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/communities/all-posts" -H 'Content-Type: application/json' -d '{"query":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/communities/all-posts" --json '{"query":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/communities/all-posts" -H 'Content-Type: application/json' -d '{"query":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/all-posts" -m GET -b '{"query":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/communities/all-posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/all-posts" -m GET -b '{"query":"","next_token":""}' -p x402
```

### Twitter: Community by ID

Retrieve full details of a specific X Community by its numeric ID: name, description, member count, moderator count, join policy, topic, rules, banner image, and admin/creator profiles. Returns X v2 API-compatible JSON with additional fields.

- Method: GET
- Path: `/communities/by/id`
- Price: $0.00040000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": true,
  "description": "Community details JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/communities/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/communities/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/communities/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/communities/by/id" --json '{"id":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/communities/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/by/id" -m GET -b '{"id":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/communities/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/by/id" -m GET -b '{"id":""}' -p x402
```

### Twitter: Community Members

Get a paginated list of members belonging to a specific X Community (full user profiles). No equivalent in the official X API. Returns up to 20 profiles per page; use `next_token` to paginate.

- Method: GET
- Path: `/communities/members`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/communities/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/communities/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/communities/members" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/communities/members" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/communities/members" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/members" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/communities/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/members" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Community Moderators

Get the moderators of a specific X Community by its numeric ID (full user profiles). Query params: id (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/communities/moderators`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/communities/moderators', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/communities/moderators', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/communities/moderators" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/communities/moderators" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/communities/moderators" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/moderators" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/communities/moderators', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/moderators" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Community Posts

Get the latest posts from a specific X Community, with author profiles. No equivalent in the official X API. Returns up to 20 tweets per page; use `next_token` to paginate.

- Method: GET
- Path: `/communities/posts`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/communities/posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/communities/posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/communities/posts" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/communities/posts" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/communities/posts" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/posts" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/communities/posts', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/communities/posts" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: List Followers

Retrieve the users who follow a specific Twitter/X List by its ID (full user profiles). Returns up to 20 profiles per page; use `next_token` to paginate.

- Method: GET
- Path: `/lists/followers`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/lists/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/lists/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/lists/followers" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/lists/followers" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/lists/followers" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/followers" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/lists/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/followers" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: List Members

Get the members of a Twitter/X List by its numeric List ID (full user profiles). Returns up to 20 profiles per page; use `next_token` to paginate.

- Method: GET
- Path: `/lists/members`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/lists/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/lists/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/lists/members" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/lists/members" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/lists/members" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/members" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/lists/members', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/members" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: List Tweets

Get the latest tweets from a Twitter/X List by its numeric List ID, with author profiles. Use `next_token` to paginate.

- Method: GET
- Path: `/lists/tweets`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/lists/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/lists/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/lists/tweets" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/lists/tweets" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/lists/tweets" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/tweets" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/lists/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/lists/tweets" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Space by ID

Retrieve details of an X Space by its numeric ID: title, state, host/speaker profiles, participant counts, and timestamps. Query param: id (required).

- Method: GET
- Path: `/spaces/by/id`
- Price: $0.00060000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": true,
  "description": "X Space details JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/spaces/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/spaces/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/spaces/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/spaces/by/id" --json '{"id":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/spaces/by/id" -H 'Content-Type: application/json' -d '{"id":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/spaces/by/id" -m GET -b '{"id":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/spaces/by/id', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/spaces/by/id" -m GET -b '{"id":""}' -p x402
```

### Twitter: Trends

Get the trending topics for a location by its WOEID (Yahoo "Where On Earth ID"), each with name, search query, and rank. Query params: woeid (required, e.g. 1 for worldwide), count (optional, min/default 30).

- Method: GET
- Path: `/trends`
- Price: $0.00060000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "woeid": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Yahoo \"Where On Earth ID\" for the location, e.g. 1 (worldwide), 2418046."
    },
    "count": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Number of trends to return. Minimum/default 30."
    }
  },
  "required": [
    "woeid"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "trends": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of trend objects: name, target query, rank."
    },
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "description": "Trends JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/trends', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "woeid": "",
    "count": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/trends', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "woeid": "",
    "count": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/trends" -H 'Content-Type: application/json' -d '{"woeid":"","count":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/trends" --json '{"woeid":"","count":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/trends" -H 'Content-Type: application/json' -d '{"woeid":"","count":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/trends" -m GET -b '{"woeid":"","count":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/trends', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "woeid": "",
    "count": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/trends" -m GET -b '{"woeid":"","count":""}' -p x402
```

### Twitter: Bulk Tweet Lookup (alias)

Alias of POST /tweets kept for X v2 API compatibility — performs the same bulk tweet lookup, not a delete (upstream exposes no bulk-delete). Query param: ids (comma-separated numeric tweet IDs, max 50).

- Method: DELETE
- Path: `/tweets`
- Price: $0.01400000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "ids": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Numeric ID string"
          }
        },
        {
          "type": "string"
        }
      ],
      "description": "Tweet IDs to look up: either an array of numeric ID strings or a comma-separated string. Max 50."
    }
  },
  "required": [
    "ids"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets', {
  method: 'DELETE',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets', {
  method: 'DELETE',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets" -X DELETE -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets" -X DELETE --json '{"ids":[""]}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets" -X DELETE -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets" -m DELETE -b '{"ids":[""]}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets', {
  method: 'DELETE',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets" -m DELETE -b '{"ids":[""]}' -p x402
```

### Twitter: Bulk Tweet Lookup

Bulk look up multiple Twitter/X tweets by their numeric tweet IDs in a single request (max 50). Each tweet includes full text, author profile, and engagement metrics. Body: { "ids": ["123", "456"] } or { "ids": "123,456" }.

- Method: POST
- Path: `/tweets`
- Price: $0.01400000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "ids": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Numeric ID string"
          }
        },
        {
          "type": "string"
        }
      ],
      "description": "Tweet IDs to look up: either an array of numeric ID strings or a comma-separated string. Max 50."
    }
  },
  "required": [
    "ids"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets" -X POST -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets" -X POST --json '{"ids":[""]}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets" -X POST -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets" -m POST -b '{"ids":[""]}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets" -m POST -b '{"ids":[""]}' -p x402
```

### Twitter: Tweet Quotes

Get the quote-tweets of a tweet by its numeric tweet ID. Query params: id (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/tweets/quotes`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets/quotes', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets/quotes', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets/quotes" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets/quotes" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets/quotes" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/quotes" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets/quotes', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/quotes" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Tweet Replies

Get the replies to a tweet by its numeric tweet ID, each with author profile and engagement metrics. Query params: id (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/tweets/replies`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets/replies', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets/replies', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets/replies" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets/replies" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets/replies" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/replies" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets/replies', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/replies" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Tweet Retweeters

Get the users who retweeted a tweet by its numeric tweet ID (full profiles). Query params: id (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/tweets/retweeters`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets/retweeters', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets/retweeters', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets/retweeters" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets/retweeters" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets/retweeters" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/retweeters" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets/retweeters', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/retweeters" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: Advanced Tweet Search

Search recent tweets using X advanced-search syntax (operators like from:, to:, since:, until:, filter:). Query params: query (required), type ("Latest" default | "Top"), next_token (cursor). Returns up to 20 tweets per page.

- Method: GET
- Path: `/tweets/search`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search terms using X advanced-search syntax, e.g. \"from:elonmusk since:2024-01-01\"."
    },
    "type": {
      "type": "string",
      "enum": [
        "Latest",
        "Top"
      ],
      "description": "Result ranking: \"Latest\" (default) or \"Top\"."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "type": "Latest",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "type": "Latest",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets/search" -H 'Content-Type: application/json' -d '{"query":"","type":"Latest","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets/search" --json '{"query":"","type":"Latest","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets/search" -H 'Content-Type: application/json' -d '{"query":"","type":"Latest","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/search" -m GET -b '{"query":"","type":"Latest","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "type": "Latest",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/search" -m GET -b '{"query":"","type":"Latest","next_token":""}' -p x402
```

### Twitter: Tweet Thread Context

Get the thread/conversation context around a tweet by its numeric tweet ID (the surrounding tweets in the thread). Query param: id (required).

- Method: GET
- Path: `/tweets/thread`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric ID, e.g. 1693573582226665701"
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/tweets/thread', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/tweets/thread', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/tweets/thread" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/tweets/thread" --json '{"id":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/tweets/thread" -H 'Content-Type: application/json' -d '{"id":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/thread" -m GET -b '{"id":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/tweets/thread', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "id": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/tweets/thread" -m GET -b '{"id":"","next_token":""}' -p x402
```

### Twitter: User About

Get a user's profile "about" details (join date, category, verification, and other profile metadata) by screen name. Query param: username (without @).

- Method: GET
- Path: `/users/about`
- Price: $0.00060000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": true,
  "description": "User-profile JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/about', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/about', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/about" -H 'Content-Type: application/json' -d '{"username":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/about" --json '{"username":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/about" -H 'Content-Type: application/json' -d '{"username":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/about" -m GET -b '{"username":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/about', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/about" -m GET -b '{"username":""}' -p x402
```

### Twitter: Bulk User Lookup

Bulk look up multiple Twitter/X user profiles by their numeric user IDs in a single request (max 50). Query param: ids (comma-separated numeric user IDs).

- Method: GET
- Path: `/users/by/ids`
- Price: $0.01600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "ids": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Numeric ID string"
          }
        },
        {
          "type": "string"
        }
      ],
      "description": "User IDs to look up: either an array of numeric ID strings or a comma-separated string. Max 50."
    }
  },
  "required": [
    "ids"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/by/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/by/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/by/ids" -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/by/ids" --json '{"ids":[""]}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/by/ids" -H 'Content-Type: application/json' -d '{"ids":[""]}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/by/ids" -m GET -b '{"ids":[""]}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/by/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "ids": [
      ""
    ]
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/by/ids" -m GET -b '{"ids":[""]}' -p x402
```

### Twitter: User by Username

Retrieve a Twitter/X user profile by screen name (handle): id, name, bio, follower/following counts, verification, profile & banner images, location, and creation date. Query param: username (without @).

- Method: GET
- Path: `/users/by/username`
- Price: $0.00060000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": true,
  "description": "User-profile JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/by/username', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/by/username', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/by/username" -H 'Content-Type: application/json' -d '{"username":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/by/username" --json '{"username":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/by/username" -H 'Content-Type: application/json' -d '{"username":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/by/username" -m GET -b '{"username":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/by/username', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/by/username" -m GET -b '{"username":""}' -p x402
```

### Twitter: User Followers

Get a user's followers (full profiles) by screen name, most recent first. Query params: username (without @, required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/users/followers`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/followers" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/followers" --json '{"username":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/followers" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/followers" -m GET -b '{"username":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/followers" -m GET -b '{"username":"","next_token":""}' -p x402
```

### Twitter: User Follower IDs

Get a user's follower IDs in bulk — lightweight, numeric IDs only (no profiles). Query params: username (without @, required), next_token (cursor).

- Method: GET
- Path: `/users/followers/ids`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of numeric follower ID strings."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Follower-ID list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/followers/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/followers/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/followers/ids" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/followers/ids" --json '{"username":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/followers/ids" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/followers/ids" -m GET -b '{"username":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/followers/ids', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/followers/ids" -m GET -b '{"username":"","next_token":""}' -p x402
```

### Twitter: User Following

Get the accounts a user follows (full profiles) by screen name. Query params: username (without @, required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/users/following`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/following', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/following', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/following" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/following" --json '{"username":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/following" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/following" -m GET -b '{"username":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/following', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/following" -m GET -b '{"username":"","next_token":""}' -p x402
```

### Twitter: Follow Relationship

Check the follow relationship between two users by handle: whether `source` follows `target` and vice versa. Query params: source (required), target (required).

- Method: GET
- Path: `/users/follow-relationship`
- Price: $0.00060000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "source": {
      "type": "string",
      "minLength": 1,
      "description": "Handle of the source user (without @)."
    },
    "target": {
      "type": "string",
      "minLength": 1,
      "description": "Handle of the target user (without @)."
    }
  },
  "required": [
    "source",
    "target"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "following": {
          "type": "boolean",
          "description": "True if source follows target."
        },
        "followed_by": {
          "type": "boolean",
          "description": "True if target follows source."
        }
      },
      "additionalProperties": true
    },
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "description": "Follow-relationship JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/follow-relationship', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "source": "",
    "target": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/follow-relationship', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "source": "",
    "target": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/follow-relationship" -H 'Content-Type: application/json' -d '{"source":"","target":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/follow-relationship" --json '{"source":"","target":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/follow-relationship" -H 'Content-Type: application/json' -d '{"source":"","target":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/follow-relationship" -m GET -b '{"source":"","target":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/follow-relationship', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "source": "",
    "target": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/follow-relationship" -m GET -b '{"source":"","target":""}' -p x402
```

### Twitter: User Mentions

Get tweets that mention a user by their screen name, newest first. Query params: username (without @, required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/users/mentions`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @), e.g. elonmusk."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "username"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/mentions', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/mentions', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/mentions" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/mentions" --json '{"username":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/mentions" -H 'Content-Type: application/json' -d '{"username":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/mentions" -m GET -b '{"username":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/mentions', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/mentions" -m GET -b '{"username":"","next_token":""}' -p x402
```

### Twitter: User Search

Search for Twitter/X users by keyword (matches names, handles, bios). Query params: query (required), next_token (cursor). Returns full profiles.

- Method: GET
- Path: `/users/search`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search keyword or phrase."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/search" -H 'Content-Type: application/json' -d '{"query":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/search" --json '{"query":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/search" -H 'Content-Type: application/json' -d '{"query":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/search" -m GET -b '{"query":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/search', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "query": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/search" -m GET -b '{"query":"","next_token":""}' -p x402
```

### Twitter: User Tweets

Get a user's latest tweets by handle or numeric user ID, newest first, each with full text and engagement metrics. Query params: username OR userId (userId preferred), include_replies (default false), next_token (cursor). Returns up to 20 tweets per page.

- Method: GET
- Path: `/users/tweets`
- Price: $0.00600000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "description": "X handle / screen name (without @)."
    },
    "userId": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric user ID. Preferred over username when known."
    },
    "include_replies": {
      "type": "boolean",
      "description": "Include replies in the timeline. Defaults to false."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of tweet objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "Tweet list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "userId": "",
    "include_replies": false
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "userId": "",
    "include_replies": false
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/tweets" -H 'Content-Type: application/json' -d '{"username":"","userId":"","include_replies":false}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/tweets" --json '{"username":"","userId":"","include_replies":false}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/tweets" -H 'Content-Type: application/json' -d '{"username":"","userId":"","include_replies":false}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/tweets" -m GET -b '{"username":"","userId":"","include_replies":false}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/tweets', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "username": "",
    "userId": "",
    "include_replies": false
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/tweets" -m GET -b '{"username":"","userId":"","include_replies":false}' -p x402
```

### Twitter: Verified Followers

Get a user's verified (blue-check) followers (full profiles). NOTE: this endpoint is keyed by numeric user ID. Query params: userId (required), next_token (cursor). Up to 20 per page.

- Method: GET
- Path: `/users/verified-followers`
- Price: $0.00700000

**Input Schema**

```json
{
  "type": "object",
  "properties": {
    "userId": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Numeric user ID, e.g. 44196397."
    },
    "next_token": {
      "type": "string",
      "description": "Pagination cursor from a previous response `next_cursor`. Omit for the first page."
    }
  },
  "required": [
    "userId"
  ],
  "additionalProperties": false
}
```

**Output Schema**

```json
{
  "type": "object",
  "properties": {
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "followings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "description": "Array of user-profile objects."
    },
    "has_next_page": {
      "type": "boolean",
      "description": "True when more pages are available."
    },
    "next_cursor": {
      "type": "string",
      "description": "Cursor to pass as `next_token` for the next page."
    }
  },
  "additionalProperties": true,
  "description": "User list JSON forwarded verbatim from twitterapi.io."
}
```

## How to invoke

Payment is handled automatically — the client signs the 402 challenge and retries.

### TypeScript — Tempo (mppx + fetch) ([docs](https://mpp.dev/sdk/typescript/client))

```ts
import { privateKeyToAccount } from 'viem/accounts'
import { Mppx, tempo } from 'mppx/client'

Mppx.create({
  methods: [tempo({ account: privateKeyToAccount('0x...') })],
})

const res = await fetch('https://twitter.payweave.services/users/verified-followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "userId": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### TypeScript — Solana (@solana/mpp + fetch) ([docs](https://github.com/solana-foundation/mpp-sdk))

```ts
import { createKeyPairSignerFromBytes } from '@solana/kit'
import { Mppx } from 'mppx/client'
import { solana } from '@solana/mpp/client'

const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */)
Mppx.create({ methods: [solana({ signer })] })

const res = await fetch('https://twitter.payweave.services/users/verified-followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "userId": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### mppx CLI ([docs](https://mpp.dev/sdk/typescript/cli))

```sh
npx mppx "https://twitter.payweave.services/users/verified-followers" -H 'Content-Type: application/json' -d '{"userId":"","next_token":""}'
```

### Tempo Wallet ([docs](https://docs.tempo.xyz/cli/wallet))

```sh
tempo request "https://twitter.payweave.services/users/verified-followers" --json '{"userId":"","next_token":""}'
```

### pay.sh — Solana Foundation ([docs](https://pay.sh))

```sh
pay --mainnet curl "https://twitter.payweave.services/users/verified-followers" -H 'Content-Type: application/json' -d '{"userId":"","next_token":""}'
```

### agentcash CLI ([docs](https://www.npmjs.com/package/agentcash))

```sh
npx agentcash fetch "https://twitter.payweave.services/users/verified-followers" -m GET -b '{"userId":"","next_token":""}' -p mpp
```

### x402 — Base / Solana USDC (x402-fetch) ([docs](https://x402.org))

```ts
import { wrapFetchWithPayment } from 'x402-fetch'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount('0x...') // Base USDC wallet
const fetchWithPay = wrapFetchWithPayment(fetch, account)

const res = await fetchWithPay('https://twitter.payweave.services/users/verified-followers', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "userId": "",
    "next_token": ""
  }),
})
const data = await res.json()
```

### x402 — agentcash CLI

```sh
npx agentcash fetch "https://twitter.payweave.services/users/verified-followers" -m GET -b '{"userId":"","next_token":""}' -p x402
```
