Skip to main content

Farcaster Channels: Discovery & Feeds

Master Farcaster channel discovery, trending content, member management, and feed algorithms using our Neynar-powered endpoints.

Overview

Farcaster channels are topic-based communities. Our API provides:

  • Channel Discovery - Search, trending, bulk lookup
  • Channel Feeds - Casts within channels
  • Channel Members - Followers and active members
  • User Channel Data - Channels a user follows

All Farcaster endpoints are prefixed with /api/farcaster/.

Neynar vs Warpcast

We provide both Warpcast (free) and Neynar (richer data) endpoints. Neynar endpoints are at /api/farcaster/neynar/... and provide more detailed data.

Prerequisites

npm install @atv-eth/x402-sdk
# or use curl/fetch directly

Channel Discovery

Get Channel by ID

// Basic (Warpcast)
const channel = await fetch('https://api.web3identity.com/api/farcaster/channel/ethereum');
const data = await channel.json();

console.log(`Channel: ${data.name}`);
console.log(`Description: ${data.description}`);
console.log(`Followers: ${data.followerCount.toLocaleString()}`);

// Rich data (Neynar)
const neynarChannel = await fetch('https://api.web3identity.com/api/farcaster/neynar/channel/ethereum');
const neynarData = await neynarChannel.json();
// Includes more metadata, moderators, etc.

Response:

{
"id": "ethereum",
"name": "Ethereum",
"description": "Discussion about Ethereum, the world computer",
"followerCount": 125678,
"imageUrl": "https://...",
"leadFid": 3,
"source": "warpcast",
"timestamp": "2026-02-09T08:30:00.000Z"
}

List All Channels

const channels = await fetch('https://api.web3identity.com/api/farcaster/channels');
const data = await channels.json();

console.log(`Found ${data.channels.length} channels`);
data.channels.forEach(ch => {
console.log(`/${ch.id} - ${ch.name} (${ch.followerCount.toLocaleString()} followers)`);
});

Bulk Channel Lookup

Get multiple channels in one request:

const ids = 'ethereum,base,farcaster,dev';
const bulk = await fetch(`https://api.web3identity.com/api/farcaster/neynar/channels/bulk?ids=${ids}`);
const data = await bulk.json();

data.channels.forEach(ch => {
console.log(`/${ch.id}: ${ch.follower_count} followers`);
});

Search Channels

const query = 'defi';
const search = await fetch(`https://api.web3identity.com/api/farcaster/neynar/channels/search?q=${query}`);
const data = await search.json();

console.log(`Channels matching "${data.query}":`);
data.channels.forEach(ch => {
console.log(` /${ch.id} - ${ch.name}`);
});
// Default: 7 days
const trending = await fetch('https://api.web3identity.com/api/farcaster/neynar/channels/trending');

// Custom time window: 1d, 7d, 30d
const trendingDaily = await fetch('https://api.web3identity.com/api/farcaster/neynar/channels/trending?time_window=1d&limit=10');
const data = await trendingDaily.json();

console.log('🔥 Trending Channels (24h):');
data.channels.forEach((ch, i) => {
console.log(`${i + 1}. /${ch.id} - ${ch.name}`);
});

Response:

{
"timeWindow": "1d",
"channels": [
{
"id": "base",
"name": "Base",
"description": "The L2 built by Coinbase",
"follower_count": 89234,
"object": "channel"
}
],
"count": 25,
"source": "neynar",
"timestamp": "2026-02-09T08:30:00.000Z"
}

Channel Feeds

Get Channel Feed

const feed = await fetch('https://api.web3identity.com/api/farcaster/channel/ethereum/feed?limit=20');
const data = await feed.json();

console.log(`Latest from /${data.channel}:`);
data.casts.forEach(cast => {
console.log(`@${cast.author?.username}: ${cast.text?.slice(0, 100)}...`);
console.log(` ❤️ ${cast.reactions?.likes_count || 0} 🔄 ${cast.reactions?.recasts_count || 0}`);
});

Paginated Channel Feed

async function* getChannelFeed(channelId, pageSize = 25) {
let cursor = '';

while (true) {
const url = `https://api.web3identity.com/api/farcaster/channel/${channelId}/feed?limit=${pageSize}${cursor ? `&cursor=${cursor}` : ''}`;
const response = await fetch(url);
const data = await response.json();

yield data.casts;

if (!data.next) break;
cursor = data.next;
}
}

// Usage
for await (const page of getChannelFeed('ethereum', 25)) {
console.log(`Got ${page.length} casts`);
// Process casts...
}

Channel Members

Get Channel Followers

const followers = await fetch('https://api.web3identity.com/api/farcaster/neynar/channel/base/followers?limit=25');
const data = await followers.json();

console.log(`Followers of /${data.channel}:`);
data.users.forEach(user => {
console.log(` @${user.username} (FID: ${user.fid})`);
});

// Pagination
if (data.next) {
const nextPage = await fetch(`https://api.web3identity.com/api/farcaster/neynar/channel/base/followers?cursor=${data.next}`);
}

Get Channel Members (Active)

const members = await fetch('https://api.web3identity.com/api/farcaster/neynar/channel/ethereum/members?limit=25');
const data = await members.json();

console.log(`Active members of /${data.channel}:`);
data.members.forEach(member => {
console.log(` @${member.user?.username} - Role: ${member.role}`);
});

User Channel Data

Get User's Channels

Find which channels a user follows:

const fid = 3; // dwr.eth
const channels = await fetch(`https://api.web3identity.com/api/farcaster/neynar/user/${fid}/channels?limit=50`);
const data = await channels.json();

console.log(`Channels followed by FID ${data.fid}:`);
data.channels.forEach(ch => {
console.log(` /${ch.id} - ${ch.name}`);
});

User Feeds

For You Feed (Algorithmic)

const fid = 3;
const forYou = await fetch(`https://api.web3identity.com/api/farcaster/neynar/feed/for-you/${fid}?limit=25`);
const data = await forYou.json();

console.log('📱 For You Feed:');
data.casts.forEach(cast => {
console.log(`@${cast.author?.username}: ${cast.text?.slice(0, 80)}...`);
});

Following Feed (Chronological)

const following = await fetch(`https://api.web3identity.com/api/farcaster/neynar/feed/following/${fid}?limit=25`);
const data = await following.json();

console.log('👥 Following Feed:');
data.casts.forEach(cast => {
console.log(`@${cast.author?.username}: ${cast.text?.slice(0, 80)}...`);
});
const trending = await fetch('https://api.web3identity.com/api/farcaster/trending/casts');
const data = await trending.json();

console.log('🔥 Trending Casts:');
data.casts.forEach(cast => {
console.log(`@${cast.author}: ${cast.text?.slice(0, 100)}...`);
console.log(` ❤️ ${cast.likes} 🔄 ${cast.recasts}`);
});
const users = await fetch('https://api.web3identity.com/api/farcaster/neynar/users/trending?limit=10');
const data = await users.json();

console.log('📈 Trending Users:');
data.users.forEach((user, i) => {
console.log(`${i + 1}. @${user.username} - ${user.follower_count?.toLocaleString()} followers`);
});

Power Users

const power = await fetch('https://api.web3identity.com/api/farcaster/neynar/users/power?limit=25');
const data = await power.json();

console.log('⚡ Power Badge Holders:');
data.users.forEach(user => {
console.log(` @${user.username} - ${user.follower_count?.toLocaleString()} followers`);
});

Cast Details & Conversations

Get Cast by Hash

const hash = '0x1234...';
const cast = await fetch(`https://api.web3identity.com/api/farcaster/neynar/cast/${hash}`);
const data = await cast.json();

console.log(`Cast by @${data.cast.author?.username}:`);
console.log(data.cast.text);
console.log(`❤️ ${data.cast.reactions?.likes_count} 🔄 ${data.cast.reactions?.recasts_count} 💬 ${data.cast.replies?.count}`);

Get Conversation Thread

const conversation = await fetch(`https://api.web3identity.com/api/farcaster/neynar/cast/${hash}/conversation?reply_depth=3`);
const data = await conversation.json();

console.log('Conversation thread:');
function printThread(cast, depth = 0) {
const indent = ' '.repeat(depth);
console.log(`${indent}@${cast.author?.username}: ${cast.text?.slice(0, 50)}...`);
(cast.direct_replies || []).forEach(reply => printThread(reply, depth + 1));
}
printThread(data.conversation.cast);

Get Cast Reactions

// Likes
const likes = await fetch(`https://api.web3identity.com/api/farcaster/neynar/cast/${hash}/reactions?type=likes&limit=25`);

// Recasts
const recasts = await fetch(`https://api.web3identity.com/api/farcaster/neynar/cast/${hash}/reactions?type=recasts&limit=25`);

const likesData = await likes.json();
console.log(`Users who liked this cast:`);
likesData.reactions.forEach(r => console.log(` @${r.user?.username}`));

Get Cast Quotes

const quotes = await fetch(`https://api.web3identity.com/api/farcaster/neynar/cast/${hash}/quotes?limit=10`);
const data = await quotes.json();

console.log(`Quote casts:`);
data.quotes.forEach(q => {
console.log(`@${q.author?.username}: ${q.text?.slice(0, 100)}...`);
});

User Profiles

Get User by FID

const fid = 3;
const user = await fetch(`https://api.web3identity.com/api/farcaster/user/${fid}`);
const data = await user.json();

console.log(`@${data.user.username}`);
console.log(`Display: ${data.user.display_name}`);
console.log(`Bio: ${data.user.profile?.bio?.text}`);
console.log(`Followers: ${data.user.follower_count}`);
console.log(`Following: ${data.user.following_count}`);

Get User by Username

const username = 'dwr';
const user = await fetch(`https://api.web3identity.com/api/farcaster/username/${username}`);
const data = await user.json();

console.log(`Found: @${data.user.username} (FID: ${data.user.fid})`);

Lookup by Ethereum Address

const address = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
const user = await fetch(`https://api.web3identity.com/api/farcaster/address/${address}`);
const data = await user.json();

console.log(`Address ${address.slice(0, 10)}... is @${data.username}`);

User Casts & Activity

const fid = 3;

// User's casts
const casts = await fetch(`https://api.web3identity.com/api/farcaster/user/${fid}/casts?limit=20`);

// Popular casts
const popular = await fetch(`https://api.web3identity.com/api/farcaster/neynar/user/${fid}/popular`);

// Activity (replies + recasts)
const activity = await fetch(`https://api.web3identity.com/api/farcaster/neynar/user/${fid}/activity?limit=25`);

Search Users

const query = 'vitalik';
const search = await fetch(`https://api.web3identity.com/api/farcaster/neynar/search/users?q=${query}&limit=10`);
const data = await search.json();

console.log(`Users matching "${data.query}":`);
data.users.forEach(u => {
console.log(` @${u.username} - ${u.display_name}`);
});

Search Casts

const query = 'ethereum merge';
const search = await fetch(`https://api.web3identity.com/api/farcaster/neynar/search/casts?q=${encodeURIComponent(query)}&limit=25`);
const data = await search.json();

console.log(`Casts about "${data.query}":`);
data.casts.forEach(c => {
console.log(`@${c.author?.username}: ${c.text?.slice(0, 80)}...`);
});

Building a Channel Explorer

Complete example:

async function exploreChannel(channelId) {
const [channel, feed, members, trending] = await Promise.all([
fetch(`https://api.web3identity.com/api/farcaster/neynar/channel/${channelId}`).then(r => r.json()),
fetch(`https://api.web3identity.com/api/farcaster/channel/${channelId}/feed?limit=10`).then(r => r.json()),
fetch(`https://api.web3identity.com/api/farcaster/neynar/channel/${channelId}/members?limit=10`).then(r => r.json()),
fetch('https://api.web3identity.com/api/farcaster/neynar/channels/trending?time_window=7d&limit=5').then(r => r.json())
]);

return {
channel: {
id: channel.channel?.id,
name: channel.channel?.name,
description: channel.channel?.description,
followers: channel.channel?.follower_count,
imageUrl: channel.channel?.image_url
},
recentCasts: feed.casts?.map(c => ({
author: c.author?.username,
text: c.text?.slice(0, 100),
likes: c.reactions?.likes_count,
timestamp: c.timestamp
})),
topMembers: members.members?.slice(0, 5).map(m => m.user?.username),
relatedTrending: trending.channels?.map(c => c.id)
};
}

// Usage
const exploration = await exploreChannel('ethereum');
console.log(JSON.stringify(exploration, null, 2));

Endpoint Reference

EndpointDescriptionSource
/api/farcaster/channelsList all channelsWarpcast
/api/farcaster/channel/:idGet channelWarpcast
/api/farcaster/channel/:id/feedChannel feedNeynar
/api/farcaster/neynar/channel/:idRich channel dataNeynar
/api/farcaster/neynar/channels/bulkBulk lookupNeynar
/api/farcaster/neynar/channels/searchSearch channelsNeynar
/api/farcaster/neynar/channels/trendingTrending channelsNeynar
/api/farcaster/neynar/channel/:id/followersChannel followersNeynar
/api/farcaster/neynar/channel/:id/membersChannel membersNeynar
/api/farcaster/neynar/user/:fid/channelsUser's channelsNeynar
/api/farcaster/neynar/feed/for-you/:fidFor You feedNeynar
/api/farcaster/neynar/feed/following/:fidFollowing feedNeynar
/api/farcaster/trending/castsTrending castsNeynar
/api/farcaster/neynar/users/trendingTrending usersNeynar
/api/farcaster/neynar/users/powerPower usersNeynar
/api/farcaster/neynar/cast/:hashCast detailsNeynar
/api/farcaster/neynar/cast/:hash/conversationConversation threadNeynar
/api/farcaster/neynar/cast/:hash/reactionsCast reactionsNeynar
/api/farcaster/neynar/cast/:hash/quotesQuote castsNeynar
/api/farcaster/neynar/search/usersSearch usersNeynar
/api/farcaster/neynar/search/castsSearch castsNeynar

Rate Limits & Pricing

  • Free tier: 100 calls/day
  • Neynar endpoints: $0.01 - $0.02 per call
  • Warpcast endpoints: $0.005 per call

Next Steps