Most of the migration can be done quickly with AI: Using github copilot
Table of Contents
- Installation
- Client Initialization
- Removed Methods and Changes in Method Names
- Enum Changes
- Import Path Changes
- Affected v1 API Methods
- Affected v2 API Methods
- Users
searchUserfetchBulkUsersfetchBulkUsersByEthereumAddresslookupUserByCustodyAddresslookupUserByUsernameV2fetchUsersByLocationfetchPopularCastsByUserfetchRepliesAndRecastsForUserfetchCastsForUserfollowUserunfollowUserregisterAccountupdateUserpublishVerificationdeleteVerificationfetchAuthorizationUrl
- Signer
- Cast
- Feed
- Reaction
- Notifications
- Channel
searchChannelsfetchBulkChannelslookupChannelremoveChannelMemberfetchChannelMembersinviteChannelMemberrespondChannelInvitefetchFollowersForAChannelfetchRelevantFollowersForAChannelfetchUserChannelsfetchUserChannelMembershipsfollowChannelunfollowChannelfetchTrendingChannelsfetchUsersActiveChannels
- Follows
- Storage
- Frame
- fname
- Webhook
- Action
- Mute
- Block
- Ban
- Onchain
- Users
Installation
yarn add @neynar/nodejs-sdk
OR
npm install @neynar/nodejs-sdk
Client Initialization
v1
import { NeynarAPIClient } from "@neynar/nodejs-sdk";
const client = new NeynarAPIClient("API_KEY", {
baseOptions: {
headers: {
"x-neynar-experimental": true,
},
},
});
v2
import { NeynarAPIClient, Configuration } from "@neynar/nodejs-sdk";
const config = new Configuration({
apiKey: "API_KEY",
baseOptions: {
headers: {
"x-neynar-experimental": true,
},
},
});
const client = new NeynarAPIClient(config);
Removed Methods and Changes in Method Names
Note: All Neynar API v1-related methods have been removed from SDK v2. This version of the SDK will only support Neynar API v2.
Removed Methods
The following methods have been removed entirely from SDK v2:
| Removed Method | Replacement |
|---|---|
fetchRecentUsers | Use webhook or kafka |
fetchAllCastsLikedByUser | fetchUserReactions |
lookupUserByFid | fetchBulkUsers |
lookupCustodyAddressForUser | fetchBulkUsers |
lookUpCastByHash | lookUpCastByHashOrWarpcastUrl |
fetchAllCastsInThread | lookupCastConversation |
fetchAllCastsCreatedByUser | fetchCastsForUser |
fetchRecentCasts | Use webhook or kafka |
fetchUserVerifications | fetchBulkUsers |
lookupUserByVerification | fetchBulkUsersByEthOrSolAddress |
fetchMentionAndReplyNotifications | fetchAllNotifications |
fetchUserLikesAndRecasts | fetchUserReactions |
Checkout Affected v1 API Methods on how to replace it.
Renamed Methods
Several methods in SDK v2 have been renamed for consistency and clarity:
| v1 Method Name | v2 Method Name |
|---|---|
lookUpCastByHashOrWarpcastUrl | lookupCastByHashOrWarpcastUrl |
publishReactionToCast | publishReaction |
deleteReactionFromCast | deleteReaction |
fetchReactionsForCast | fetchCastReactions |
fetchBulkUsersByEthereumAddress | fetchBulkUsersByEthOrSolAddress |
Methods Updated to v2 API
These methods retain the original method names but now use the v2 version of the neynar API:
| v1 Method Name | v2 Method Name |
|---|---|
fetchUserFollowersV2 | fetchUserFollowers |
fetchUserFollowingV2 | fetchUserFollowing |
lookupUserByUsernameV2 | lookupUserByUsername |
Enum Changes
Renamed enums
The following enums have been renamed in SDK v2 to align with the updated naming conventions:
| v1 Enum Name | v2 Enum Name |
|---|---|
TimeWindow | FetchTrendingChannelsTimeWindowEnum |
TrendingFeedTimeWindow | FetchTrendingFeedTimeWindowEnum |
BulkCastsSortType | FetchBulkCastsSortTypeEnum |
BulkUserAddressTypes | BulkUserAddressType |
Enum Key Changes
Certain enum keys have been modified in SDK v2. If you were using the following enums, be aware that their key formats may have changed:
NotificationTypeValidateFrameAggregateWindowFetchTrendingChannelsTimeWindowEnum(formerlyTimeWindow)FetchTrendingFeedTimeWindowEnum(formerlyTrendingFeedTimeWindow)FetchBulkCastsSortTypeEnum(formerlyBulkCastsSortType)BulkUserAddressType(formerlyBulkUserAddressTypes)
Import Path Changes
All the api-related enums and schemas are now centralized and exported from /build/api directory instead of /build/neynar-api/v2/*
import {CastParamType, NotificationTypeEnum, User, Cast, ...etc } from '@neynar/nodejs-sdk/build/api'
Note: Imports for following isApiErrorResponse utility function and Webhook interfaces remains the same
import { isApiErrorResponse, WebhookFollowCreated, WebhookFollowDeleted, WebhookReactionCreated, WebhookReactionDeleted, WebhookCastCreated, WebhookUserCreated, WebhookUserUpdated } form '@neynar/nodejs-sdk'
Affected v1 API Methods
The following methods have been completely removed in SDK v2 (Ref. Removed Methods). As a result, the response structure will be different in the new methods that replace the deprecated v1 methods.
fetchAllCastsLikedByUser (Use fetchUserReactions)
fetchAllCastsLikedByUser (Use fetchUserReactions)fetchAllCastsLikedByUser
const fid = 3;
const viewerFid = 2;
const limit = 50;
client
.fetchAllCastsLikedByUser(fid, {
viewerFid,
limit,
})
.then((response) => {
const { likes, reactor, next } = response.result;
console.log("likes", likes); // likes.reaction, likes.cast, likes.cast_author
console.log("reactor", reactor);
console.log("nextCursor", next.cursor);
});
fetchUserReactions
import { ReactionsType } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const viewerFid = 2;
const limit = 50;
const type = ReactionsType.Likes;
client.fetchUserReactions({ fid, type, viewerFid, limit }).then((response) => {
const { reactions } = response; // This structure is changed
console.log("likes", reactions);
});
lookupUserByFid (Use fetchBulkUsers)
lookupUserByFid (Use fetchBulkUsers)lookupUserByFid
const fid = 19960;
const viewerFid = 194;
client.lookupUserByFid(fid, viewerFid).then((response) => {
const { user } = response.result;
console.log("user", user);
});
fetchBulkUsers
const fid = 3;
const viewerFid = 2;
client.fetchBulkUsers({ fids: [fid], viewerFid }).then((res) => {
const { users } = res;
console.log("user", users[0]); // This structure is changed
});
lookupCustodyAddressForUser (Use fetchBulkUsers)
lookupCustodyAddressForUser (Use fetchBulkUsers)lookupCustodyAddressForUser
const fid = 19960;
client.lookupCustodyAddressForUser(fid).then((response) => {
const { fid, custodyAddress } = response.result;
console.log("fid:", fid);
console.log("custodyAddress:", custodyAddress);
});
fetchBulkUsers
const fid = 19960;
client.fetchBulkUsers({ fids: [fid] }).then((res) => {
const { users } = res;
console.log("fid:", users[0].fid);
console.log("custodyAddress", users[0].custody_address);
});
lookUpCastByHash (Use lookupCastByHashOrWarpcastUrl)
lookUpCastByHash (Use lookupCastByHashOrWarpcastUrl)lookUpCastByHash
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const viewerFid = 3;
client
.lookUpCastByHash(hash, {
viewerFid,
})
.then((response) => {
const { cast } = response.result;
console.log(cast);
});
lookupCastByHashOrWarpcastUrl
import { CastParamType } from "@neynar/nodejs-sdk/build/api";
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const viewerFid = 3;
const type = CastParamType.Hash;
client
.lookupCastByHashOrWarpcastUrl({
identifier: hash,
type,
viewerFid,
})
.then((response) => {
const { cast } = response;
console.log("cast", cast); // This structure is changed
});
fetchAllCastsInThread (Use lookupCastConversation)
fetchAllCastsInThread (Use lookupCastConversation)fetchAllCastsInThread
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const viewerFid = 3;
client.fetchAllCastsInThread(hash, viewerFid).then((response) => {
const { casts } = response.result;
console.log("conversation", casts);
});
lookupCastConversation
import { CastParamType } from "@neynar/nodejs-sdk/build/api";
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const viewerFid = 3;
const type = CastParamType.Hash;
client
.lookupCastConversation({
identifier: hash,
type,
viewerFid,
})
.then((response) => {
const { cast } = response.conversation;
console.log("conversation", cast); // This structure is changed
});
fetchAllCastsCreatedByUser (Use fetchCastsForUser)
fetchAllCastsCreatedByUser (Use fetchCastsForUser)fetchAllCastsCreatedByUser
const fid = 3;
const parentUrl = "https://ethereum.org";
const viewerFid = 2;
const limit = 5;
client
.fetchAllCastsCreatedByUser(fid, {
parentUrl,
viewerFid,
limit,
})
.then((response) => {
const { casts } = response.result;
console.log("User Casts:", casts);
});
fetchCastsForUser
const fid = 3;
const parentUrl = "https://ethereum.org";
const viewerFid = 2;
const limit = 5;
client
.fetchCastsForUser({ fid, parentUrl, viewerFid, limit })
.then((response) => {
const { casts } = response;
console.log("Users casts: ", casts); // This structure is changed
});
fetchUserVerifications (Use fetchBulkUsers)
fetchUserVerifications (Use fetchBulkUsers)fetchUserVerifications
const fid = 3;
client.fetchUserVerifications(fid).then((response) => {
const { fid, username, display_name, verifications } = response.result;
console.log("fid ", fid);
console.log("username ", username);
console.log("display_name ", display_name);
console.log("verifications ", verifications);
});
fetchBulkUsers
const fid = 3;
client.fetchBulkUsers({ fids: [fid] }).then((response) => {
const { fid, username, display_name, verified_addresses } = response.users[0];
console.log("fid ", fid);
console.log("username ", username);
console.log("display_name ", display_name);
console.log("verifications ", verified_addresses);
});
lookupUserByVerification (Use fetchBulkUsersByEthOrSolAddress)
lookupUserByVerification (Use fetchBulkUsersByEthOrSolAddress)lookupUserByVerification
const address = "0x7ea5dada4021c2c625e73d2a78882e91b93c174c";
client.lookupUserByVerification(address).then((response) => {
const { user } = response.result;
console.log("User:", user);
});
fetchBulkUsersByEthOrSolAddress
import { BulkUserAddressType } from "@neynar/nodejs-sdk/build/api";
const addresses = ["0x7ea5dada4021c2c625e73d2a78882e91b93c174c"];
const addressTypes = [BulkUserAddressType.VerifiedAddress];
client
.fetchBulkUsersByEthOrSolAddress({ addresses, addressTypes })
.then((response) => {
const user = response[addresses[0]];
console.log("User:", user[0]); // This structure is changed
});
fetchMentionAndReplyNotifications (Use fetchAllNotifications)
fetchMentionAndReplyNotifications (Use fetchAllNotifications)fetchMentionAndReplyNotifications
const fid = 3;
const viewerFid = 2;
client
.fetchMentionAndReplyNotifications(fid, {
viewerFid,
})
.then((response) => {
console.log("Notifications:", response.result);
});
fetchAllNotifications
const fid = 3;
client.fetchAllNotifications({ fid }).then((response) => {
console.log("response:", response); // Returns notifications including mentions, replies, likes, and quotes
});
fetchUserLikesAndRecasts (Use fetchUserReactions)
fetchUserLikesAndRecasts (Use fetchUserReactions)fetchUserLikesAndRecasts
const fid = 12345;
const viewerFid = 67890;
const limit = 5;
client
.fetchUserLikesAndRecasts(fid, {
viewerFid,
limit,
})
.then((response) => {
const { notifications } = response.result;
console.log("User Reactions : ", notifications);
});
fetchUserReactions
import { ReactionsType } from "@neynar/nodejs-sdk/build/api";
const fid = 12345;
const viewerFid = 67890;
const limit = 5;
client
.fetchUserReactions({ fid, type: ReactionsType.All, viewerFid, limit })
.then((response) => {
const { reactions } = response;
console.log("User Reactions : ", reactions);
});
Affected v2 API Methods
- Arguments Format:
In SDK v2, all methods now accept arguments as key-value pairs (kvargs). In SDK v1, only optional parameters were passed as key-value pairs, while required arguments were simple parameters.
Users
searchUser
searchUserv1
const q = "ris";
const viewerFid = 19960;
const limit = 10;
client.searchUser(q, viewerFid, { limit }).then((response) => {
console.log("response:", response);
});
v2
const q = "ris";
const viewerFid = 19960;
const limit = 10;
client.searchUser({ q, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
fetchBulkUsers
fetchBulkUsersv1
const fids = [2, 3];
const viewerFid = 19960;
client.fetchBulkUsers(fids, { viewerFid }).then((response) => {
console.log("response:", response);
});
v2
const fids = [2, 3];
const viewerFid = 19960;
client.fetchBulkUsers({ fids, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchBulkUsersByEthereumAddress
fetchBulkUsersByEthereumAddressv1
import { BulkUserAddressTypes } from "@neynar/nodejs-sdk";
const addresses = [
"0xa6a8736f18f383f1cc2d938576933e5ea7df01a1",
"0x7cac817861e5c3384753403fb6c0c556c204b1ce",
];
const addressTypes = [BulkUserAddressTypes.CUSTODY_ADDRESS];
const viewerFid = 3;
client
.fetchBulkUsersByEthereumAddress(addresses, { addressTypes, viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
Note:
fetchBulkUsersByEthereumAddressis renamed tofetchBulkUsersByEthOrSolAddress(Ref. Renamed Methods)BulkUserAddressTypesis renamed toBulkUserAddressType(Ref. Renamed enums)- Import path for
BulkUserAddressTypeis changed (Ref. Import path changes) - Enum key changed from
CUSTODY_ADDRESStoCustodyAddress(Ref. Enum Key Changes)
import { BulkUserAddressType } from "@neynar/nodejs-sdk/build/api";
const addresses = [
"0xa6a8736f18f383f1cc2d938576933e5ea7df01a1",
"0x7cac817861e5c3384753403fb6c0c556c204b1ce",
];
const addressTypes = [BulkUserAddressType.CustodyAddress];
const viewerFid = 3;
client
.fetchBulkUsersByEthOrSolAddress({ addresses, addressTypes, viewerFid })
.then((response) => {
console.log("response:", response);
});
lookupUserByCustodyAddress
lookupUserByCustodyAddressv1
const custodyAddress = "0xd1b702203b1b3b641a699997746bd4a12d157909";
client.lookupUserByCustodyAddress(custodyAddress).then((response) => {
console.log("response:", response);
});
v2
const custodyAddress = "0xd1b702203b1b3b641a699997746bd4a12d157909";
client.lookupUserByCustodyAddress({ custodyAddress }).then((response) => {
console.log("response:", response);
});
lookupUserByUsernameV2
lookupUserByUsernameV2This method is renamed to lookupUserByUsername.
v1
const username = "manan";
const viewerFid = 3;
client.lookupUserByUsernameV2(username, { viewerFid }).then((response) => {
console.log("response:", response);
});
v2
Note: lookupUserByUsernameV2 is now renamed to lookupUserByUsername (Ref. Methods Updated to v2 API)
const username = "manan";
const viewerFid = 3;
client.lookupUserByUsername({ username, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchUsersByLocation
fetchUsersByLocationv1
const latitude = 37.7749;
const longitude = -122.4194;
const viewerFid = 3;
const limit = 5;
client
.fetchUsersByLocation(latitude, longitude, { viewerFid, limit })
.then((response) => {
console.log("response:", response);
});
v2
const latitude = 37.7749;
const longitude = -122.4194;
const viewerFid = 3;
const limit = 5;
client
.fetchUsersByLocation({ latitude, longitude, viewerFid, limit })
.then((response) => {
console.log("response:", response);
});
fetchPopularCastsByUser
fetchPopularCastsByUserv1
const fid = 3;
const viewerFid = 19960;
client.fetchPopularCastsByUser(fid, { viewerFid }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const viewerFid = 19960;
client.fetchPopularCastsByUser({ fid, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchRepliesAndRecastsForUser
fetchRepliesAndRecastsForUserv1
const fid = 3;
const limit = 25;
const viewerFid = 19960;
client
.fetchRepliesAndRecastsForUser(fid, { limit, viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const limit = 25;
const viewerFid = 3;
client
.fetchRepliesAndRecastsForUser({ fid, limit, viewerFid })
.then((response) => {
console.log("response:", response);
});
fetchCastsForUser
fetchCastsForUserv1
const fid = 3;
const viewerFid = 3;
const limit = 25;
const includeReplies = false;
client
.fetchCastsForUser(fid, {
limit,
viewerFid,
includeReplies,
})
.then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const viewerFid = 3;
const limit = 25;
const includeReplies = false;
client
.fetchCastsForUser({ fid, viewerFid, limit, includeReplies })
.then((response) => {
console.log("response:", response);
});
followUser
followUserv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetFids = [3, 2, 1];
client.followUser(signerUuid, targetFids).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetFids = [3, 2, 1];
client.followUser({ signerUuid, targetFids }).then((response) => {
console.log("response:", response);
});
unfollowUser
unfollowUserv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetFids = [3, 2, 1];
client.unfollowUser(signerUuid, targetFids).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetFids = [3, 2, 1];
client.unfollowUser({ signerUuid, targetFids }).then((response) => {
console.log("response:", response);
});
registerAccount
registerAccountv1
const signature = "signatureString";
const fid = 12345;
const requestedUserCustodyAddress = "0x123...abc";
const deadline = 1672531200;
const fname = "newUsername";
client
.registerAccount(fid, signature, requestedUserCustodyAddress, deadline, {
fname,
})
.then((response) => {
console.log("response:", response);
});
v2
const signature = "signatureString";
const fid = 12345;
const requestedUserCustodyAddress = "0x123...abc";
const deadline = 1672531200;
const fname = "newUsername";
client
.registerAccount({
signature,
fid,
requestedUserCustodyAddress,
deadline,
fname,
})
.then((response) => {
console.log("response:", response);
});
updateUser
updateUserv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const bio = "New bio here";
const pfpUrl = "https://example.com/pfp.jpg";
const username = "newUsername";
const displayName = "New Display Name";
client
.updateUser(signerUuid, {
bio,
pfpUrl,
username,
displayName,
})
.then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const bio = "New bio here";
const pfpUrl = "https://example.com/pfp.jpg";
const username = "newUsername";
const displayName = "New Display Name";
client
.updateUser({ signerUuid, bio, pfpUrl, username, displayName })
.then((response) => {
console.log("response:", response);
});
publishVerification
publishVerificationv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const address = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const blockHash =
"0x191905a9201170abb55f4c90a4cc968b44c1b71cdf3db2764b775c93e7e22b29";
const ethSignature =
"0x2fc09da1f4dcb723fefb91f77932c249c418c0af00c66ed92ee1f35002c80d6a1145280c9f361d207d28447f8f7463366840d3a9309036cf6954afd1fd331beb1b";
client
.publishVerification(signerUuid, address, blockHash, ethSignature)
.then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const address = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const blockHash =
"0x191905a9201170abb55f4c90a4cc968b44c1b71cdf3db2764b775c93e7e22b29";
const ethSignature =
"0x2fc09da1f4dcb723fefb91f77932c249c418c0af00c66ed92ee1f35002c80d6a1145280c9f361d207d28447f8f7463366840d3a9309036cf6954afd1fd331beb1b";
client
.publishVerification({ signerUuid, address, blockHash, ethSignature })
.then((response) => {
console.log("response:", response);
});
deleteVerification
deleteVerificationv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const address = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
client.deleteVerification(signerUuid, address).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const address = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
client.deleteVerification({ signerUuid, address }).then((response) => {
console.log("response:", response);
});
fetchAuthorizationUrl
fetchAuthorizationUrlv1
import { AuthorizationUrlResponseType } from "@neynar/nodejs-sdk";
const clientId = "your-client-id";
const responseType = AuthorizationUrlResponseType.Code;
client.fetchAuthorizationUrl(clientId, responseType).then((response) => {
console.log("response:", response);
});
v2
Note: The import path for AuthorizationUrlResponseType is changed. (Ref. Import path changes)
import { AuthorizationUrlResponseType } from "@neynar/nodejs-sdk/build/api";
const clientId = "your-client-id";
const responseType = AuthorizationUrlResponseType.Code;
client.fetchAuthorizationUrl({ clientId, responseType }).then((response) => {
console.log("response:", response);
});
Signer
lookupSigner
lookupSignerv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
client.lookupSigner(signerUuid).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
client.lookupSigner({ signerUuid }).then((response) => {
console.log("response:", response);
});
registerSignedKey
registerSignedKeyv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const signature = "0xsig_1";
const appFid = 18949;
const deadline = 1625097600;
const sponsor = {
fid: 0,
signature: `0xsig_2`,
};
client
.registerSignedKey(signerUuid, appFid, deadline, signature, { sponsor })
.then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const signature = "0xsig_1";
const appFid = 18949;
const deadline = 1625097600;
const sponsor = {
fid: 0,
signature: `0xsig_2`,
};
client
.registerSignedKey({ signerUuid, signature, appFid, deadline, sponsor })
.then((response) => {
console.log("response:", response);
});
lookupDeveloperManagedSigner
lookupDeveloperManagedSignerv1
const publicKey =
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
client.lookupDeveloperManagedSigner(publicKey).then((response) => {
console.log("response:", response);
});
v2
const publicKey =
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
client.lookupDeveloperManagedSigner({ publicKey }).then((response) => {
console.log("response:", response);
});
registerSignedKeyForDeveloperManagedSigner
registerSignedKeyForDeveloperManagedSignerv1
const publicKey =
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
const signature = "0xsig_1";
const appFid = 12345;
const deadline = 1625097600;
const sponsor = {
fid: 0,
signature: `0xsig_2`,
};
client
.registerSignedKeyForDeveloperManagedSigner(
publicKey,
signature,
appFid,
deadline,
{ sponsor }
)
.then((response) => {
console.log("response:", response);
});
v2
const publicKey =
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
const signature = "0xsig_1";
const appFid = 12345;
const deadline = 1625097600;
const sponsor = {
fid: 0,
signature: `0xsig_2`,
};
client
.registerSignedKeyForDeveloperManagedSigner({
publicKey,
signature,
appFid,
deadline,
sponsor,
})
.then((response) => {
console.log("response:", response);
});
publishMessageToFarcaster
publishMessageToFarcasterv1
const body = {};
client.publishMessageToFarcaster(body).then((response) => {
console.log("response:", response);
});
v2
const body = {};
client.publishMessageToFarcaster({ body }).then((response) => {
console.log("response:", response);
});
Cast
lookUpCastByHashOrWarpcastUrl
lookUpCastByHashOrWarpcastUrlv1
import { CastParamType } from "@neynar/nodejs-sdk";
const identifier = "https://warpcast.com/rish/0x9288c1";
const type = CastParamType.Url;
const viewerFid = 3;
client
.lookUpCastByHashOrWarpcastUrl(identifier, type, { viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
Note:
lookUpCastByHashOrWarpcastUrlis renamed tolookupCastByHashOrWarpcastUrl(Ref. Renamed Methods)- The import path for
CastParamTypeis changed. (Ref. Import path changes)
import { CastParamType } from "@neynar/nodejs-sdk/build/api";
const identifier = "https://warpcast.com/rish/0x9288c1";
const type = CastParamType.Url;
const viewerFid = 3;
client
.lookupCastByHashOrWarpcastUrl({ identifier, type, viewerFid })
.then((response) => {
console.log("response:", response);
});
publishCast
publishCastv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const text = "Testing publishCast() method";
const embeds = [
{
url: "https://warpcast.com/harper.eth/0x3c974d78",
},
];
const replyTo = "0x9e95c380791fce11ffbb14b2ea458b233161bafd";
const idem = "my-cast-idem";
const parent_author_fid = 6131;
client
.publishCast(signerUuid, text, {
replyTo,
idem,
embeds,
parent_author_fid,
})
.then((response) => {
console.log("cast:", response);
});
v2
Note:
replyToparam is now renamed toparentparent_author_fidis now cam camelCase (parentAuthorFid)- sdk v1
responseobject is sdk v2response.castobject
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const text = "Testing publishCast() method";
const embeds = [
{
url: "https://warpcast.com/harper.eth/0x3c974d78",
},
];
const replyTo = "0x9e95c380791fce11ffbb14b2ea458b233161bafd";
const idem = "my-cast-idem";
const parentAuthorFid = 6131;
client
.publishCast({
signerUuid,
text,
embeds,
parent: replyTo,
idem,
parentAuthorFid,
})
.then((response) => {
console.log("cast:", response.cast);
});
deleteCast
deleteCastv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetHash = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
client.deleteCast(signerUuid, targetHash).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const targetHash = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
client.deleteCast({ signerUuid, targetHash }).then((response) => {
console.log("response:", response);
});
fetchBulkCasts
fetchBulkCastsv1
import { BulkCastsSortType } from "@neynar/nodejs-sdk";
const casts = [
"0xa896906a5e397b4fec247c3ee0e9e4d4990b8004",
"0x27ff810f7f718afd8c40be236411f017982e0994",
];
const viewerFid = 3;
const sortType = BulkCastsSortType.LIKES;
client
.fetchBulkCasts(casts, {
viewerFid,
sortType,
})
.then((response) => {
console.log("response:", response);
});
v2
Note:
BulkCastsSortTypeis renamed toFetchBulkCastsSortTypeEnum(Ref. Renamed enums)- Enum key is changed now
LIKESisLikes(Ref. Enum Key Changes)
import { FetchBulkCastsSortTypeEnum } from "@neynar/nodejs-sdk";
const casts = [
"0xa896906a5e397b4fec247c3ee0e9e4d4990b8004",
"0x27ff810f7f718afd8c40be236411f017982e0994",
];
const viewerFid = 3;
const sortType = FetchBulkCastsSortTypeEnum.LIKES;
client.fetchBulkCasts({ casts, viewerFid, sortType }).then((response) => {
console.log("response:", response);
});
searchCasts
searchCastsv1
const q = "We are releasing a v2 of our nodejs sdk.";
const authorFid = 19960;
const viewerFid = 3;
const limit = 3;
client.searchCasts(q, { authorFid, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
v2
const q = "We are releasing a v2 of our nodejs sdk.";
const authorFid = 19960;
const viewerFid = 3;
const limit = 3;
client.searchCasts({ q, authorFid, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
lookupCastConversation
lookupCastConversationv1
import { CastParamType } from "@neynar/nodejs-sdk";
const identifier = "https://warpcast.com/rish/0x9288c1";
const type = CastParamType.Url;
const replyDepth = 2;
const includeChronologicalParentCasts = true;
const viewerFid = 3;
const fold = "above";
const limit = 2;
client
.lookupCastConversation(
"https://warpcast.com/rish/0x9288c1",
CastParamType.Url,
{
replyDepth,
includeChronologicalParentCasts,
fold,
viewerFid,
limit,
}
)
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for CastParamType is changed. (Ref. Import path changes)
import { CastParamType } from "@neynar/nodejs-sdk/build/api";
const identifier = "https://warpcast.com/rish/0x9288c1";
const type = CastParamType.Url;
const replyDepth = 2;
const includeChronologicalParentCasts = true;
const viewerFid = 3;
const fold = "above";
const limit = 2;
client
.lookupCastConversation({
identifier,
type,
replyDepth,
includeChronologicalParentCasts,
viewerFid,
fold,
limit,
})
.then((response) => {
console.log("response:", response);
});
fetchComposerActions
fetchComposerActionsv1
import { CastComposerType } from "@neynar/nodejs-sdk/neynar-api/v2";
const list = CastComposerType.Top;
const limit = 25;
client.fetchComposerActions(list, { limit }).then((response) => {
console.log("response:", response);
});
v2
Note: The import path for CastComposerType is changed. (Ref. Import path changes)
import { CastComposerType } from "@neynar/nodejs-sdk/build/api";
const list = CastComposerType.Top;
const limit = 25;
client.fetchComposerActions({ list, limit }).then((response) => {
console.log("response:", response);
});
Feed
fetchUserFollowingFeed
fetchUserFollowingFeedv1
const fid = 3;
const viewerFid = 100;
const withRecasts = true;
const limit = 30;
client
.fetchUserFollowingFeed(fid, {
withRecasts,
limit,
viewerFid,
})
.then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const viewerFid = 100;
const withRecasts = true;
const limit = 30;
client
.fetchUserFollowingFeed({ fid, viewerFid, withRecasts, limit })
.then((response) => {
console.log("response:", response);
});
fetchFeedForYou
fetchFeedForYouv1
import { ForYouProvider } from "@neynar/nodejs-sdk/neynar-api/v2";
const fid = 3;
const viewerFid = 10;
const provider = ForYouProvider.Mbd;
const limit = 20;
const providerMetadata = encodeURIComponent(
JSON.stringify({
filters: {
channels: ["https://farcaster.group/founders"],
},
})
);
client
.fetchFeedForYou(fid, {
limit,
viewerFid,
provider,
providerMetadata: providerMetadata,
})
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ForYouProvider is changed. (Ref. Import path changes)
import { ForYouProvider } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const viewerFid = 10;
const provider = ForYouProvider.Mbd;
const limit = 20;
const providerMetadata = encodeURIComponent(
JSON.stringify({
filters: {
channels: ["https://farcaster.group/founders"],
},
})
);
client
.fetchFeedForYou({ fid, viewerFid, provider, limit, providerMetadata })
.then((response) => {
console.log("response:", response);
});
fetchFeedByChannelIds
fetchFeedByChannelIdsv1
const channelIds = ["neynar", "farcaster"];
const withRecasts = true;
const viewerFid = 100;
const withReplies = true;
const limit = 30;
const shouldModerate = false;
client
.fetchFeedByChannelIds(channelIds, {
withRecasts,
withReplies,
limit,
viewerFid,
shouldModerate,
})
.then((response) => {
console.log("response:", response);
});
v2
const channelIds = ["neynar", "farcaster"];
const withRecasts = true;
const viewerFid = 100;
const withReplies = true;
const limit = 30;
const shouldModerate = false;
client
.fetchFeedByChannelIds({
channelIds,
withRecasts,
viewerFid,
withReplies,
limit,
shouldModerate,
})
.then((response) => {
console.log("response:", response);
});
fetchFeedByParentUrls
fetchFeedByParentUrlsv1
const parentUrls = [
"chain://eip155:1/erc721:0xd4498134211baad5846ce70ce04e7c4da78931cc",
];
const withRecasts = true;
const viewerFid = 100;
const withReplies = true;
const limit = 30;
client
.fetchFeedByParentUrls(parentUrls, {
withRecasts,
withReplies,
limit,
viewerFid,
})
.then((response) => {
console.log("response:", response);
});
v2
const parentUrls = [
"chain://eip155:1/erc721:0xd4498134211baad5846ce70ce04e7c4da78931cc",
];
const withRecasts = true;
const viewerFid = 100;
const withReplies = true;
const limit = 30;
client
.fetchFeedByParentUrls({
parentUrls,
withRecasts,
viewerFid,
withReplies,
limit,
})
.then((response) => {
console.log("response:", response);
});
fetchFeed
fetchFeedv1
import { FeedType } from "@neynar/nodejs-sdk/neynar-api/v2";
const feedType = FeedType.Following;
const fid = 3;
const withRecasts = true;
const limit = 50;
const viewerFid = 100;
client
.fetchFeed(feedType, { fid, limit, withRecasts, viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for FeedType is changed. (Ref. Import path changes)
import { FeedType } from "@neynar/nodejs-sdk/build/api";
const feedType = FeedType.Following;
const fid = 3;
const withRecasts = true;
const limit = 50;
const viewerFid = 100;
client
.fetchFeed({ feedType, fid, withRecasts, limit, viewerFid })
.then((response) => {
console.log("response:", response);
});
fetchFramesOnlyFeed
fetchFramesOnlyFeedv1
const limit = 30;
const viewerFid = 3;
client.fetchFramesOnlyFeed({ limit, viewerFid }).then((response) => {
console.log("response:", response);
});
v2
const limit = 30;
const viewerFid = 3;
client.fetchFramesOnlyFeed({ limit, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchTrendingFeed
fetchTrendingFeedv1
import { TrendingFeedTimeWindow } from "@neynar/nodejs-sdk";
const limit = 10;
const viewerFid = 3;
const timeWindow = TrendingFeedTimeWindow.SIX_HOUR;
const channelId = "farcaster";
const provider = "mbd";
const providerMetadata = encodeURIComponent(
JSON.stringify({
filters: {
channels: ["https://farcaster.group/founders"],
},
})
);
client
.fetchTrendingFeed({
limit,
timeWindow,
channelId,
viewerFid,
provider,
providerMetadata,
})
.then((response) => {
console.log("response:", response);
});
v2
Note:
TrendingFeedTimeWindowis renamed toFetchTrendingFeedTimeWindowEnum(Ref. Renamed enums)- The import path is for
FetchTrendingFeedTimeWindowEnumchanged. (Ref. Import path changes) - Enum Keys have changed
SIX_HOURto_6h(Ref. Enum Key Changes)
import { FetchTrendingFeedTimeWindowEnum } from "@neynar/nodejs-sdk/build/api";
const limit = 10;
const viewerFid = 3;
const timeWindow = FetchTrendingFeedTimeWindowEnum._6h;
const channelId = "farcaster";
const provider = "mbd";
const providerMetadata = encodeURIComponent(
JSON.stringify({
filters: {
channels: ["https://farcaster.group/founders"],
},
})
);
client
.fetchTrendingFeed({
limit,
viewerFid,
timeWindow,
channelId,
provider,
providerMetadata,
})
.then((response) => {
console.log("response:", response);
});
Reaction
publishReactionToCast
publishReactionToCastv1
import { ReactionType } from "@neynar/nodejs-sdk";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const reactionType = ReactionType.Like;
const target = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const idem = "my-reaction-idem";
client
.publishReactionToCast(signerUuid, reactionType, target, { idem })
.then((response) => {
console.log("response:", response);
});
v2
Note:
publishReactionToCastis renamed topublishReaction(Ref. Renamed Methods)- The import path for
ReactionTypeis changed. (Ref. Import path changes)
import { ReactionType } from "@neynar/nodejs-sdk/build/api";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const reactionType = ReactionType.Like;
const target = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const idem = "my-reaction-idem";
client
.publishReaction({ signerUuid, reactionType, target, idem })
.then((response) => {
console.log("response:", response);
});
deleteReactionFromCast
deleteReactionFromCastv1
import { ReactionType } from "@neynar/nodejs-sdk";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const reactionType = ReactionType.Like;
const target = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const idem = "my-reaction-idem";
client
.deleteReactionFromCast(signerUuid, reactionType, target, { idem })
.then((response) => {
console.log("response:", response);
});
v2
Note:
deleteReactionFromCastis renamed todeleteReaction(Ref. Renamed Methods)- The import path for
ReactionTypeis changed. (Ref. Import path changes)
import { ReactionType } from "@neynar/nodejs-sdk/build/api";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const reactionType = ReactionType.Like;
const target = "0x1ea99cbed57e4020314ba3fadd7c692d2de34d5f";
const idem = "my-reaction-idem";
client
.deleteReaction({ signerUuid, reactionType, target, idem })
.then((response) => {
console.log("response:", response);
});
fetchUserReactions
fetchUserReactionsv1
import { ReactionsType } from "@neynar/nodejs-sdk";
const fid = 3;
const type = ReactionsType.All;
const viewerFid = 19960;
const limit = 50;
client
.fetchUserReactions(fid, type, {
limit,
viewerFid,
})
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ReactionsType is changed. (Ref. Import path changes)
import { ReactionsType } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const type = ReactionsType.All;
const viewerFid = 19960;
const limit = 50;
client.fetchUserReactions({ fid, type, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
fetchReactionsForCast
fetchReactionsForCastv1
import { ReactionsType } from "@neynar/nodejs-sdk";
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const types = ReactionsType.All;
const viewerFid = 3;
const limit = 50;
client
.fetchReactionsForCast(hash, types, {
limit,
viewerFid,
})
.then((response) => {
console.log("response:", response);
});
v2
Note:
fetchReactionsForCastis now renamed tofetchCastReactions(Ref. Renamed Methods)- The import path for
ReactionsTypeis changed. (Ref. Import path changes)
import { ReactionsType } from "@neynar/nodejs-sdk/build/api";
const hash = "0xfe90f9de682273e05b201629ad2338bdcd89b6be";
const types = ReactionsType.All;
const viewerFid = 3;
const limit = 50;
client
.fetchCastReactions({ hash, types, viewerFid, limit })
.then((response) => {
console.log("response:", response);
});
Notifications
Notifications include likes, mentions, replies, and quotes of a user's casts.
fetchAllNotifications
fetchAllNotificationsv1
import { NotificationType } from "@neynar/nodejs-sdk";
const fid = 3;
const type = NotificationType.LIKES;
const priorityMode = false;
client
.fetchAllNotifications(fid, {
type,
priorityMode,
})
.then((response) => {
console.log("response:", response);
});
v2
Note:
isPriorityis removed.- The import path is for
NotificationTypechanged. (Ref. Import path changes) - Enum Keys have changed
LIKEStoLikes(Ref. Enum Key Changes) - Supports notification types: Likes, Mentions, Replies, and Quotes
import { NotificationType } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const type = NotificationType.Likes;
const priorityMode = false;
client.fetchAllNotifications({ fid, type, priorityMode }).then((response) => {
console.log("response:", response);
});
fetchChannelNotificationsForUser
fetchChannelNotificationsForUserv1
const fid = 3;
const channelIds = ["neynar", "farcaster"];
const priorityMode = false;
client
.fetchChannelNotificationsForUser(fid, channelIds, {
priorityMode,
})
.then((response) => {
console.log("response:", response);
});
v2
Note: isPriority is removed.
const fid = 3;
const channelIds = ["neynar", "farcaster"];
const priorityMode = false;
client
.fetchChannelNotificationsForUser({ fid, channelIds, priorityMode })
.then((response) => {
console.log("response:", response);
});
fetchNotificationsByParentUrlForUser
fetchNotificationsByParentUrlForUserv1
const fid = 3;
const parentUrls = [
"chain://eip155:1/erc721:0xd4498134211baad5846ce70ce04e7c4da78931cc",
"chain://eip155:1/erc721:0xfd8427165df67df6d7fd689ae67c8ebf56d9ca61",
];
const priorityMode = false;
client
.fetchNotificationsByParentUrlForUser(fid, parentUrls, { priorityMode })
.then((response) => {
console.log("response:", response);
});
v2
Note: isPriority is removed.
const fid = 3;
const parentUrls = [
"chain://eip155:1/erc721:0xd4498134211baad5846ce70ce04e7c4da78931cc",
"chain://eip155:1/erc721:0xfd8427165df67df6d7fd689ae67c8ebf56d9ca61",
];
const priorityMode = false;
client
.fetchNotificationsByParentUrlForUser({ fid, parentUrls, priorityMode })
.then((response) => {
console.log("response:", response);
});
markNotificationsAsSeen
markNotificationsAsSeenv1
import { NotificationType } from "@neynar/nodejs-sdk";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const type = NotificationType.FOLLOWS;
client.markNotificationsAsSeen(signerUuid, { type }).then((response) => {
console.log("response:", response);
});
v2
Note:
- The import path for
NotificationTypeis changed. (Ref. Import path changes) - Enum Keys have changed
FOLLOWStoFollows(Ref. Enum Key changes) - Supported notification types include Follows, Likes, Mentions, Replies, and Quotes
import { NotificationType } from "@neynar/nodejs-sdk/build/api";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const type = NotificationType.Follows;
client.markNotificationsAsSeen({ signerUuid, type }).then((response) => {
console.log("response:", response);
});
Channel
searchChannels
searchChannelsv1
const q = ux;
const limit = 5;
client.searchChannels("ux", { limit }).then((response) => {
console.log("response:", response);
});
v2
const q = ux;
const limit = 5;
client.searchChannels({ q, limit }).then((response) => {
console.log("response:", response);
});
fetchBulkChannels
fetchBulkChannelsv1
import { ChannelType } from "@neynar/nodejs-sdk";
const ids = ["neynar", "farcaster"];
const type = ChannelType.Id;
const viewerFid = 3;
client.fetchBulkChannels(ids, { viewerFid, type }).then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ChannelType is changed. (Ref. Import path changes)
const ids = ["neynar", "farcaster"];
const type = ChannelType.Id;
const viewerFid = 3;
client.fetchBulkChannels({ ids, type, viewerFid }).then((response) => {
console.log("response:", response);
});
lookupChannel
lookupChannelv1
import { ChannelType } from "@neynar/nodejs-sdk";
const id = "neynar";
const type = ChannelType.Id;
const viewerFid = 3;
client.lookupChannel("neynar", { viewerFid, type }).then((response) => {
console.log("response:", response);
});
v2
import { ChannelType } from "@neynar/nodejs-sdk/build/api";
const id = "neynar";
const type = ChannelType.Id;
const viewerFid = 3;
client.lookupChannel({ id, type, viewerFid }).then((response) => {
console.log("response:", response);
});
removeChannelMember
removeChannelMemberv1
import { ChannelMemberRole } from "@neynar/nodejs-sdk/neynar-api/v2";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const fid = 3;
const role = ChannelMemberRole.Member;
client
.removeChannelMember(signerUuid, channelId, fid, role)
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ChannelMemberRole is changed. (Ref. Import path changes)
import { ChannelMemberRole } from "@neynar/nodejs-sdk/build/api";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const fid = 3;
const role = "member";
client
.removeChannelMember({ signerUuid, channelId, fid, role })
.then((response) => {
console.log("response:", response);
});
fetchChannelMembers
fetchChannelMembersv1
const channelId = "neynar";
const fid = 194;
const limit = 10;
client.fetchChannelMembers(channelId, { limit, fid }).then((response) => {
console.log("response:", response);
});
v2
const channelId = "neynar";
const fid = 194;
const limit = 10;
client.fetchChannelMembers({ channelId, fid, limit }).then((response) => {
console.log("response:", response);
});
inviteChannelMember
inviteChannelMemberv1
import { ChannelMemberRole } from "@neynar/nodejs-sdk/neynar-api/v2";
const signnerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const fid = 3;
const role = ChannelMemberRole.Member;
client
.inviteChannelMember(signnerUuid, channelId, fid, role)
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ChannelMemberRole is changed. (Ref. Import path changes)
import { ChannelMemberRole } from "@neynar/nodejs-sdk/build/api";
const signnerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const fid = 3;
const role = ChannelMemberRole.Member;
client
.inviteChannelMember({ signerUuid, channelId, fid, role })
.then((response) => {
console.log("response:", response);
});
respondChannelInvite
respondChannelInvitev1
import { ChannelMemberRole } from "@neynar/nodejs-sdk/neynar-api/v2";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const role = ChannelMemberRole.Member;
const accept = true;
client
.respondChannelInvite(signerUuid, channelId, role, accept)
.then((response) => {
console.log("response:", response);
});
v2
Note: The import path for ChannelMemberRole is changed. (Ref. Import path changes)
import { ChannelMemberRole } from "@neynar/nodejs-sdk/build/api";
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
const role = ChannelMemberRole.Member;
const accept = true;
client
.respondChannelInvite({ signerUuid, channelId, role, accept })
.then((response) => {
console.log("response:", response);
});
fetchFollowersForAChannel
fetchFollowersForAChannelv1
const id = "founders";
const viewerFid = 3;
const limit = 50;
client.fetchFollowersForAChannel(id, { limit, viewerFid }).then((response) => {
console.log("response:", response);
});
v2
const id = "founders";
const viewerFid = 3;
const limit = 50;
client.fetchFollowersForAChannel({ id, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
fetchRelevantFollowersForAChannel
fetchRelevantFollowersForAChannelv1
const id = "why";
const viewerFid = 3;
client.fetchRelevantFollowersForAChannel(id, viewerFid).then((response) => {
console.log("response:", response);
});
v2
const id = "why";
const viewerFid = 3;
client.fetchRelevantFollowersForAChannel({ id, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchUserChannels
fetchUserChannelsv1
const fid = 3;
const limit = 5;
client.fetchUserChannels(fid, { limit }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const limit = 5;
client.fetchUserChannels({ fid, limit }).then((response) => {
console.log("response:", response);
});
fetchUserChannelMemberships
fetchUserChannelMembershipsv1
const fid = 3;
const limit = 10;
client.fetchUserChannelMemberships(fid, { limit }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const limit = 10;
client.fetchUserChannelMemberships({ fid, limit }).then((response) => {
console.log("response:", response);
});
followChannel
followChannelv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
client.followChannel(signerUuid, channelId).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
client.followChannel({ signerUuid, channelId }).then((response) => {
console.log("response:", response);
});
unfollowChannel
unfollowChannelv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
client.unfollowChannel(signerUuid, channelId).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const channelId = "neynar";
client.unfollowChannel({ signerUuid, channelId }).then((response) => {
console.log("response:", response);
});
fetchTrendingChannels
fetchTrendingChannelsv1
import { TimeWindow } from "@neynar/nodejs-sdk";
const timeWindow = TimeWindow.SEVEN_DAYS;
const limit = 20;
client.fetchTrendingChannels(timeWindow, { limit }).then((response) => {
console.log("response:", response);
});
v2
Note:
TimeWindowis renamed toFetchTrendingChannelsTimeWindowEnum(Ref. Renamed enums)FetchTrendingChannelsTimeWindowEnumimport is changed (Ref. Import Path Changes)- Enums key is changed from
SEVEN_DAYSto_7d(Ref. Enum Key Changes)
import { FetchTrendingChannelsTimeWindowEnum } from "@neynar/nodejs-sdk/build/api";
const timeWindow = FetchTrendingChannelsTimeWindowEnum._7d;
const limit = 20;
client.fetchTrendingChannels({ timeWindow, limit }).then((response) => {
console.log("response:", response);
});
fetchUsersActiveChannels
fetchUsersActiveChannelsv1
const fid = 3;
const limit = 10;
client.fetchUsersActiveChannels(fid, { limit }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const limit = 10;
client.fetchUsersActiveChannels({ fid, limit }).then((response) => {
console.log("response:", response);
});
Follows
fetchUserFollowersV2
fetchUserFollowersV2v1
import { FollowSortType } from "@neynar/nodejs-sdk";
const fid = 3;
const viewerFid = 23;
const sortType = FollowSortType.DescChron;
const limit = 10;
client
.fetchUserFollowersV2(fid, { limit, viewerFid, sortType })
.then((response) => {
console.log("response:", response);
});
v2
Note:
fetchUserFollowersV2is now renamed tofetchUserFollowers(Ref. Methods Updated to v2 API)FollowSortTypeimport is changed (Ref. Import Path Changes)
import { FollowSortType } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const viewerFid = 23;
const sortType = FollowSortType.DescChron;
const limit = 10;
client
.fetchUserFollowers({ fid, viewerFid, sortType, limit })
.then((response) => {
console.log("response:", response);
});
fetchRelevantFollowers
fetchRelevantFollowersv1
const targetFid = 3;
const viewerFid = 19960;
client.fetchRelevantFollowers(targetFid, viewerFid).then((response) => {
console.log("response:", response);
});
v2
const targetFid = 3;
const viewerFid = 19960;
client.fetchRelevantFollowers({ targetFid, viewerFid }).then((response) => {
console.log("response:", response);
});
fetchUserFollowingV2
fetchUserFollowingV2v1
import { FollowSortType } from "@neynar/nodejs-sdk";
const fid = 3;
const viewerFid = 23;
const sortType = FollowSortType.DescChron;
const limit = 10;
client
.fetchUserFollowingV2(fid, { limit, viewerFid, sortType })
.then((response) => {
console.log("response:", response);
});
v2
Note:
fetchUserFollowingV2is now renamed tofetchUserFollowing(Ref. Methods Updated to v2 API)FollowSortTypeimport is changed (Ref. Import Path Changes)
import { FollowSortType } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const viewerFid = 23;
const sortType = FollowSortType.DescChron;
const limit = 10;
client
.fetchUserFollowing({ fid, viewerFid, sortType, limit })
.then((response) => {
console.log("response:", response);
});
fetchFollowSuggestions
fetchFollowSuggestionsv1
const fid = 3;
const viewerFid = 19950;
const limit = 5;
client.fetchFollowSuggestions(fid, { limit, viewerFid }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const viewerFid = 19950;
const limit = 5;
client.fetchFollowSuggestions({ fid, viewerFid, limit }).then((response) => {
console.log("response:", response);
});
Storage
lookupUserStorageAllocations
lookupUserStorageAllocationsv1
const fid = 3;
client.lookupUserStorageAllocations(fid).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
client.lookupUserStorageAllocations({ fid }).then((response) => {
console.log("response:", response);
});
lookupUserStorageUsage
lookupUserStorageUsagev1
const fid = 3;
client.lookupUserStorageUsage(3).then((response) => {
console.log("User Storage Usage:", response);
});
v2
const fid = 3;
client.lookupUserStorageUsage({ fid }).then((response) => {
console.log("response:", response);
});
buyStorage
buyStoragev1
const fid = 3;
const units = 1;
const idem = "some_random_unique_key";
client.buyStorage(fid, { units, idem }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const units = 1;
const idem = "some_random_unique_key";
client.buyStorage({ fid, units, idem }).then((response) => {
console.log("response:", response);
});
Frame
postFrameAction
postFrameActionv1
const signerUuid = "signerUuid";
const castHash = "castHash";
const action = {
button: {
title: "Button Title",
index: 1,
},
frames_url: "frames Url",
post_url: "Post Url",
};
client.postFrameAction(signerUuid, castHash, action).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "signerUuid";
const castHash = "castHash";
const action = {
button: {
title: "Button Title",
index: 1,
},
frames_url: "frames Url",
post_url: "Post Url",
};
client.postFrameAction({ signerUuid, castHash, action }).then((response) => {
console.log("response:", response);
});
validateFrameAction
validateFrameActionv1
const messageBytesInHex = "messageBytesInHex";
const castReactionContext = false;
const followContext = true;
const signerContext = true;
const channelFollowContext = true;
client
.validateFrameAction(messageBytesInHex, {
castReactionContext,
followContext,
signerContext,
channelFollowContext,
})
.then((response) => {
console.log("response:", response);
});
v2
const messageBytesInHex = "messageBytesInHex";
const castReactionContext = false;
const followContext = true;
const signerContext = true;
const channelFollowContext = true;
client
.validateFrameAction({
messageBytesInHex,
castReactionContext,
followContext,
signerContext,
channelFollowContext,
})
.then((response) => {
console.log("response:", response);
});
fetchValidateFrameAnalytics
fetchValidateFrameAnalyticsv1
import {
ValidateFrameAnalyticsType,
ValidateFrameAggregateWindow,
} from "@neynar/nodejs-sdk";
const frameUrl = "https://shorturl.at/bDRY9";
const analyticsType = ValidateFrameAnalyticsType.InteractionsPerCast;
const start = "2024-04-06T06:44:56.811Z";
const stop = "2024-04-08T06:44:56.811Z";
const aggregateWindow = ValidateFrameAggregateWindow.TWELVE_HOURS;
client
.fetchValidateFrameAnalytics(frameUrl, analyticsType, start, stop, {
aggregateWindow,
})
.then((response) => {
console.log("response:", response);
});
v2
Note:
- Import for
ValidateFrameAnalyticsTypeandValidateFrameAggregateWindowis changed (Ref. Import Path Changes) - Enums key is changed from
TWELVE_HOURSto_12h(Ref. Enum Key Changes)
import {
ValidateFrameAnalyticsType,
ValidateFrameAggregateWindow,
} from "@neynar/nodejs-sdk/build/api";
const frameUrl = "https://shorturl.at/bDRY9";
const analyticsType = ValidateFrameAnalyticsType.InteractionsPerCast;
const start = "2024-04-06T06:44:56.811Z";
const stop = "2024-04-08T06:44:56.811Z";
const aggregateWindow = ValidateFrameAggregateWindow._12h;
client
.fetchValidateFrameAnalytics({
frameUrl,
analyticsType,
start,
stop,
aggregateWindow,
})
.then((response) => {
console.log("response:", response);
});
lookupNeynarFrame
lookupNeynarFramev1
import { FrameType } from "@neynar/nodejs-sdk";
const type = FrameType.Uuid;
const uuid = "your-frame-uuid";
client.lookupNeynarFrame(uuid, { type }).then((response) => {
console.log("response:", response);
});
v2
Note: Import for FrameType is changed (Ref. Import Path Changes)
import { FrameType } from "@neynar/nodejs-sdk/build/api";
const type = FrameType.Uuid;
const uuid = "your-frame-uuid";
client.lookupNeynarFrame({ type, uuid }).then((response) => {
console.log("response:", response);
});
deleteNeynarFrame
deleteNeynarFramev1
const uuid = "your-frame-uuid";
client.deleteNeynarFrame(uuid).then((response) => {
console.log("response:", response);
});
v2
const uuid = "your-frame-uuid";
client.deleteNeynarFrame({ uuid }).then((response) => {
console.log("response:", response);
});
fetchFrameMetaTagsFromUrl
fetchFrameMetaTagsFromUrlv1
const url = "https://frames.neynar.com/f/862277df/ff7be6a4";
client.fetchFrameMetaTagsFromUrl(url).then((response) => {
console.log("response:", response);
});
v2
const url = "https://frames.neynar.com/f/862277df/ff7be6a4";
client.fetchFrameMetaTagsFromUrl({ url }).then((response) => {
console.log("response:", response);
});
postFrameActionDeveloperManaged
postFrameActionDeveloperManagedv1
const action = // Example action
const signature_packet = // Example signature packet
const castHash = "castHash";
client
.postFrameDeveloperManagedAction(action, signature_packet, {
castHash: castHash,
})
.then((response) => {
console.log("response:", response);
});
v2
const action = // Example action
const signature_packet = // Example signature packet
const castHash = "castHash";
client.postFrameActionDeveloperManaged({castHash, action, signaturePacket}).then(response => {
console.log('response:', response);
});
fname
isFnameAvailable
isFnameAvailablev1
const fname = "shreyas-chorge";
client.isFnameAvailable(fname).then((response) => {
console.log("response:", response);
});
v2
const fname = "shreyas-chorge";
client.isFnameAvailable({ fname }).then((response) => {
console.log("response:", response);
});
Webhook
lookupWebhook
lookupWebhookv1
const webhookId = "yourWebhookId";
client.lookupWebhook(webhookId).then((response) => {
console.log("response:", response);
});
v2
const webhookId = "yourWebhookId";
client.lookupWebhook({ webhookId }).then((response) => {
console.log("response:", response);
});
publishWebhook
publishWebhookv1
const name = "Cast created Webhook";
const url = "https://example.com/webhook";
const subscription = {
"cast.created": {
author_fids: [3, 196, 194],
mentioned_fids: [196],
},
"user.created": {},
};
client.publishWebhook(name, url, { subscription }).then((response) => {
console.log("response:", response);
});
v2
const name = "Cast created Webhook";
const url = "https://example.com/webhook";
const subscription = {
"cast.created": {
author_fids: [3, 196, 194],
mentioned_fids: [196],
},
"user.created": {},
};
client.publishWebhook({ name, url, subscription }).then((response) => {
console.log("response:", response);
});
updateWebhookActiveStatus
updateWebhookActiveStatusv1
const webhookId = "yourWebhookId";
const active = false;
client.updateWebhookActiveStatus(webhookId, active).then((response) => {
console.log("response:", response);
});
v2
const webhookId = "yourWebhookId";
const active = false;
client.updateWebhookActiveStatus({ webhookId, active }).then((response) => {
console.log("response:", response);
});
updateWebhook
updateWebhookv1
const webhookId = "existingWebhookId";
const name = "UpdatedWebhookName";
const url = "https://example.com/new-webhook-url";
const subscription = {
"cast.created": {
author_fids: [2, 4, 6],
mentioned_fids: [194],
},
"user.created": {},
};
client
.updateWebhook(webhookId, name, url, { subscription })
.then((response) => {
console.log("response:", response);
});
v2
const webhookId = "existingWebhookId";
const name = "UpdatedWebhookName";
const url = "https://example.com/new-webhook-url";
const subscription = {
"cast.created": {
author_fids: [2, 4, 6],
mentioned_fids: [194],
},
"user.created": {},
};
client
.updateWebhook({ name, url, subscription, webhookId })
.then((response) => {
console.log("response:", response);
});
deleteWebhook
deleteWebhookv1
const webhookId = "yourWebhookId";
client.deleteWebhook(webhookId).then((response) => {
console.log("response:", response);
});
v2
const webhookId = "yourWebhookId";
client.deleteWebhook({ webhookId }).then((response) => {
console.log("response:", response);
});
Action
publishFarcasterAction
publishFarcasterActionv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const baseUrl = "https://appb.example.com";
const action = {
type: "sendMessage",
payload: {
message: "Hello from App A!",
},
};
client.publishFarcasterAction(signerUuid, baseUrl, action).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const baseUrl = "https://appb.example.com";
const action = {
type: "sendMessage",
payload: {
message: "Hello from App A!",
},
};
client
.publishFarcasterAction({ signerUuid, baseUrl, action })
.then((response) => {
console.log("response:", response);
});
Mute
fetchMuteList
fetchMuteListv1
const fid = 3;
const limit = 10;
client.fetchMuteList(fid, { limit }).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const limit = 10;
client.fetchMuteList({ fid, limit }).then((response) => {
console.log("response:", response);
});
publishMute
publishMutev1
const fid = 3;
const mutedFid = 19960;
client.publishMute(fid, mutedFid).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const mutedFid = 19960;
client.publishMute({ fid, mutedFid }).then((response) => {
console.log("response:", response);
});
deleteMute
deleteMutev1
const fid = 3;
const mutedFid = 19960;
client.deleteMute(fid, mutedFid).then((response) => {
console.log("Mute Response:", response);
});
v2
const fid = 3;
const mutedFid = 19960;
client.deleteMute({ fid, mutedFid }).then((response) => {
console.log("response:", response);
});
Block
publishBlock
publishBlockv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const blockedFid = 19960;
client.publishBlock(signerUuid, blockedFid).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const blockedFid = 19960;
client.publishBlock({ signerUuid, blockedFid }).then((response) => {
console.log("response:", response);
});
deleteBlock
deleteBlockv1
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const blockedFid = 19960;
client.deleteBlock(signerUuid, blockedFid).then((response) => {
console.log("response:", response);
});
v2
const signerUuid = "19d0c5fd-9b33-4a48-a0e2-bc7b0555baec";
const blockedFid = 19960;
client.deleteBlock({ signerUuid, blockedFid }).then((response) => {
console.log("response:", response);
});
Ban
publishBans
publishBansv1
const fids = [3, 19960];
client.publishBan(fids).then((response) => {
console.log("response:", response);
});
v2
const fids = [3, 19960];
client.publishBans({ fids }).then((response) => {
console.log("response:", response);
});
deleteBans
deleteBansv1
const fids = [3, 19960];
client.deleteBans(fids).then((response) => {
console.log("response:", response);
});
v2
const fids = [3, 19960];
client.deleteBans({ fids }).then((response) => {
console.log("response:", response);
});
Onchain
fetchUserBalance
fetchUserBalancev1
const fid = 3;
const networks = Networks.Base;
client.fetchUserBalance(fid, networks).then((response) => {
console.log("response:", response);
});
v2
const fid = 3;
const networks = Networks.Base;
client.fetchUserBalance({ fid, networks }).then((response) => {
console.log("response:", response);
});
fetchSubscriptionsForFid
fetchSubscriptionsForFidv1
import { SubscriptionProvider } from "@neynar/nodejs-sdk";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
client.fetchSubscriptionsForFid(fid, subscriptionProvider).then((response) => {
console.log("response:", response);
});
v2
Note: Import for SubscriptionProvider is changed (Ref. Import Path Changes)
import { SubscriptionProvider } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
client
.fetchSubscriptionsForFid({ fid, subscriptionProvider })
.then((response) => {
console.log("response:", response);
});
fetchSubscribedToForFid
fetchSubscribedToForFidv1
import { SubscriptionProvider } from "@neynar/nodejs-sdk";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
const viewerFid = 1231;
client
.fetchSubscribedToForFid(fid, subscriptionProvider, { viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
Note: Import for SubscriptionProvider is changed (Ref. Import Path Changes)
import { SubscriptionProvider } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
const viewerFid = 1231;
client
.fetchSubscribedToForFid({ fid, subscriptionProvider, viewerFid })
.then((response) => {
console.log("response:", response);
});
fetchSubscribersForFid
fetchSubscribersForFidv1
import { SubscriptionProvider } from "@neynar/nodejs-sdk";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
const viewerFid = 1231;
client
.fetchSubscribedToForFid(fid, subscriptionProvider, { viewerFid })
.then((response) => {
console.log("response:", response);
});
v2
import { SubscriptionProvider } from "@neynar/nodejs-sdk/build/api";
const fid = 3;
const subscriptionProvider = SubscriptionProvider.FabricStp;
const viewerFid = 1231;
client
.fetchSubscribersForFid({ fid, subscriptionProvider, viewerFid })
.then((response) => {
console.log("response:", response);
});
fetchSubscriptionCheck
fetchSubscriptionCheckv1
const addresses = [
"0xedd3783e8c7c52b80cfbd026a63c207edc9cbee7",
"0x5a927ac639636e534b678e81768ca19e2c6280b7",
];
const contractAddress = "0x76ad4cb9ac51c09f4d9c2cadcea75c9fa9074e5b";
const chainId = "8453";
client
.fetchSubscriptionCheck(addresses, contractAddress, chainId)
.then((response) => {
console.log("response:", response);
});
v2
const addresses = [
"0xedd3783e8c7c52b80cfbd026a63c207edc9cbee7",
"0x5a927ac639636e534b678e81768ca19e2c6280b7",
];
const contractAddress = "0x76ad4cb9ac51c09f4d9c2cadcea75c9fa9074e5b";
const chainId = "8453";
client
.fetchSubscriptionCheck({ addresses, contractAddress, chainId })
.then((response) => {
console.log("response:", response);
});
This guide should assist in updating your existing code to SDK v2. If you encounter any issues or have further questions, please reach out to us. Warpcast Telegram
