Adding Comments to Content or Profiles | Tapestry Documentation

On this page

The Comments API allows you to create, update, delete, and retrieve comments associated with content, enabling users to engage in discussions and share their thoughts on posts. You can use either the socialfi package (recommended for easier integration) or call the API directly.

Installing and Setting Up the Socialfi Package (Recommended)

We recommend using the socialfi package as it simplifies API interactions:

npm install socialfi
import { SocialFi } from 'socialfi';

const API_URL = 'https://api.usetapestry.dev/v1/'; // tapestry prod URL
// const API_URL = 'https://api.dev.usetapestry.dev/v1/'; // tapestry dev URL

const API_KEY = process.env.TAPESTRY_API_KEY; // Get your API key from https://app.usetapestry.dev/

const client = new SocialFi({
  baseURL: API_URL,
  apiKey: API_KEY,
});

Creating a Comment

To allow users to comment on a post, use the comment creation endpoint:

Using the Socialfi Package

try {
  const newComment = await client.comments.createComment(
    {
      apiKey: API_KEY,
    },
    {
      profileId: 'user123', // The ID of the profile creating the comment
      contentId: 'post456', // The ID of the content being commented on
      text: 'Great post! Thanks for sharing.',
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }
  );
  console.log('Comment created:', newComment);
} catch (error) {
  console.error('Error creating comment:', error);
}

Using the API Directly

try {
  const response = await fetch('https://api.usetapestry.dev/v1/comments?apiKey=YOUR_API_KEY', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      profileId: 'user123',
      contentId: 'post456',
      text: 'Great post! Thanks for sharing.',
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }),
  });

const newComment = await response.json();
  console.log('Comment created:', newComment);
} catch (error) {
  console.error('Error creating comment:', error);
}

Request Parameters

Field Type Description
profileId string The ID of the profile creating the comment.
contentId string The ID of the content being commented on.
text string The text content of the comment.
blockchain string The blockchain to use (default: SOLANA)
execution string Execution method (default: FAST_UNCONFIRMED)

Response Example

{
  "comment": {
    "id": "comment-1234567890",
    "profileId": "user123",
    "contentId": "post456",
    "text": "Great post! Thanks for sharing.",
    "blockchain": "SOLANA",
    "createdAt": "2024-01-15T10:30:00Z",
    "updatedAt": "2024-01-15T10:30:00Z"
  },
  "author": {
    "id": "user123",
    "username": "johndoe",
    "profileImage": "https://example.com/avatar.jpg"
  }
}

Update a Comment

If a user wants to edit their comment, use the comment update endpoint:

Using the Socialfi Package

try {
  const updatedComment = await client.comments.updateComment(
    {
      apiKey: API_KEY,
    },
    {
      commentId: 'comment-1234567890',
      text: 'Updated comment: Great post! Thanks for sharing this insight.',
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }
  );
  console.log('Comment updated:', updatedComment);
} catch (error) {
  console.error('Error updating comment:', error);
}

Using the API Directly

try {
  const response = await fetch('https://api.usetapestry.dev/v1/comments/comment-1234567890?apiKey=YOUR_API_KEY', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      text: 'Updated comment: Great post! Thanks for sharing this insight.',
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }),
  });

const updatedComment = await response.json();
  console.log('Comment updated:', updatedComment);
} catch (error) {
  console.error('Error updating comment:', error);
}

Request Parameters

Field Type Description
commentId string The ID of the comment to update.
text string The updated text of the comment.
blockchain string The blockchain to use
execution string Execution method

Response Example

{
  "comment": {
    "id": "comment-1234567890",
    "profileId": "user123",
    "contentId": "post456",
    "text": "Updated comment: Great post! Thanks for sharing this insight.",
    "blockchain": "SOLANA",
    "createdAt": "2024-01-15T10:30:00Z",
    "updatedAt": "2024-01-15T10:35:00Z"
  }
}

Delete a Comment

To allow users to delete their comments, use the comment deletion endpoint:

Using the Socialfi Package

try {
  const deletionResult = await client.comments.deleteComment(
    {
      apiKey: API_KEY,
    },
    {
      commentId: 'comment-1234567890',
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }
  );
  console.log('Comment deleted:', deletionResult);
} catch (error) {
  console.error('Error deleting comment:', error);
}

Using the API Directly

try {
  const response = await fetch('https://api.usetapestry.dev/v1/comments/comment-1234567890?apiKey=YOUR_API_KEY', {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      blockchain: 'SOLANA',
      execution: 'FAST_UNCONFIRMED'
    }),
  });

const deletionResult = await response.json();
  console.log('Comment deleted:', deletionResult);
} catch (error) {
  console.error('Error deleting comment:', error);
}

Response Example

{
  "success": true,
  "message": "Comment deleted successfully"
}

Get Comments by Content

To retrieve comments about a specific post:

Using the Socialfi Package

try {
  const comments = await client.comments.getCommentsByContent(
    {
      apiKey: API_KEY,
      contentId: 'post456',
      limit: 20,
      offset: 0
    }
  );
  console.log('Comments for post:', comments);
} catch (error) {
  console.error('Error fetching comments:', error);
}

Using the API Directly

try {
  const response = await fetch(
    'https://api.usetapestry.dev/v1/comments?contentId=post456&limit=20&offset=0&apiKey=YOUR_API_KEY'
  );
  const comments = await response.json();
  console.log('Comments for post:', comments);
} catch (error) {
  console.error('Error fetching comments:', error);
}

Query Parameters

Parameter Type Description
contentId string The ID of the content to get comments for.
limit number Maximum number of comments to return.
offset number Number of comments to skip.

Response Example

{
  "comments": [
    {
      "comment": {
        "id": "comment-1234567890",
        "text": "Great content!",
        "createdAt": "2024-01-15T10:30:00Z",
        "updatedAt": "2024-01-15T10:30:00Z"
      },
      "author": {
        "id": "user123",
        "username": "johndoe",
        "profileImage": "https://example.com/avatar1.jpg"
      }
    },
    {
      "comment": {
        "id": "comment-0987654321",
        "text": "Thanks for sharing!",
        "createdAt": "2024-01-15T11:00:00Z",
        "updatedAt": "2024-01-15T11:00:00Z"
      },
      "author": {
        "id": "user789",
        "username": "janedoe",
        "profileImage": "https://example.com/avatar2.jpg"
      }
    }
  ],
  "pagination": {
    "total": 25,
    "limit": 20,
    "offset": 0,
    "hasMore": true
  }
}

Get Comments by Profile

To retrieve comments authored by a specific user:

Using the Socialfi Package

try {
  const userComments = await client.comments.getCommentsByProfile(
    {
      apiKey: API_KEY,
      profileId: 'user123',
      limit: 10,
      offset: 0
    }
  );
  console.log('Comments by user:', userComments);
} catch (error) {
  console.error('Error fetching user comments:', error);
}

Using the API Directly

try {
  const response = await fetch(
    'https://api.usetapestry.dev/v1/comments?profileId=user123&limit=10&offset=0&apiKey=YOUR_API_KEY'
  );
  const userComments = await response.json();
  console.log('Comments by user:', userComments);
} catch (error) {
  console.error('Error fetching user comments:', error);
}

Query Parameters

Parameter Type Description
profileId string The ID of the profile to get comments from.
limit number Maximum number of comments to return.
offset number Number of comments to skip.

Response Example

{
  "comments": [
    {
      "comment": {
        "id": "comment-1234567890",
        "text": "Great content!",
        "createdAt": "2024-01-15T10:30:00Z",
        "updatedAt": "2024-01-15T10:30:00Z"
      },
      "content": {
        "id": "post456",
        "title": "Amazing Post Title",
        "author": {
          "id": "user789",
          "username": "contentcreator"
        }
      }
    }
  ],
  "pagination": {
    "total": 15,
    "limit": 10,
    "offset": 0,
    "hasMore": true
  }
}

Authentication

All comments endpoints require an API key to be provided in the request for authentication. Make sure to keep your API key secure and never expose it in client-side code.

Error Handling

In case of an error, the API will respond with an appropriate HTTP status code and an error message in the response body:

{
  "success": false,
  "error": "Invalid comment ID provided",
  "code": "INVALID_COMMENT_ID"
}

Best Practices

When implementing comments functionality: