get_seller_feedback
Fetch paginated buyer and seller feedback for a Vinted user to assess seller trustworthiness and reliability before making a purchase.
Instructions
Fetch paginated buyer and seller feedback reviews for a Vinted user. Each entry includes the review text, star rating (1–5), feedback type (1=negative, 2=neutral, 3=positive), reviewer username, timestamp, and the associated item ID. Use this to assess seller trustworthiness and reliability before making a purchase.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sellerId | Yes | Numeric Vinted user ID (visible in profile URLs: vinted.fr/member/12345-username) | |
| country | No | Country site where the seller is registered | fr |
| limit | No | Reviews per page, 1–100 | |
| page | No | Page number starting at 1 |
Implementation Reference
- src/mcp.ts:146-158 (registration)Tool 'get_seller_feedback' is registered as an MCP tool with its name, description, and input schema (sellerId, country, limit, page).
name: 'get_seller_feedback', description: 'Fetch paginated buyer and seller feedback reviews for a Vinted user. Each entry includes the review text, star rating (1–5), feedback type (1=negative, 2=neutral, 3=positive), reviewer username, timestamp, and the associated item ID. Use this to assess seller trustworthiness and reliability before making a purchase.', inputSchema: { type: 'object', properties: { sellerId: { type: 'integer', description: 'Numeric Vinted user ID (visible in profile URLs: vinted.fr/member/12345-username)' }, country: { type: 'string', enum: COUNTRIES, default: 'fr', description: 'Country site where the seller is registered' }, limit: { type: 'integer', default: 20, description: 'Reviews per page, 1–100' }, page: { type: 'integer', default: 1, description: 'Page number starting at 1' }, }, required: ['sellerId'], }, }, - src/mcp.ts:235-235 (handler)The MCP request dispatcher case for 'get_seller_feedback' calls opGetSellerFeedback.
case 'get_seller_feedback': result = await opGetSellerFeedback(c, a as any); break; - src/ops/get-seller-feedback.ts:1-11 (handler)The opGetSellerFeedback function is the ops-layer handler that delegates to the underlying API endpoint function getSellerFeedback.
import { VintedClient } from '../client/session.js'; import { getSellerFeedback } from '../client/endpoints.js'; import type { Country } from '../client/types.js'; import type { FeedbackResult } from '../client/endpoints.js'; export async function opGetSellerFeedback( client: VintedClient, args: { sellerId: number; country?: Country; limit?: number; page?: number }, ): Promise<FeedbackResult> { return getSellerFeedback(client, args.sellerId, args.country ?? 'fr', args.limit ?? 20, args.page ?? 1); } - src/client/endpoints.ts:149-159 (schema)FeedbackEntry interface defines structure of each feedback entry (id, createdAt, feedback, rating, feedbackRate, itemId, fromUsername, fromUserId, isSystem).
export interface FeedbackEntry { id: number; createdAt: string; feedback: string; rating: number; // 1–5 stars feedbackRate: number; // 1=negative 2=neutral 3=positive itemId: number | null; fromUsername: string; fromUserId: number; isSystem: boolean; } - src/client/endpoints.ts:161-203 (helper)getSellerFeedback function makes the actual API call to /api/v2/feedbacks, maps the response into FeedbackEntry objects, and returns a FeedbackResult with pagination info.
export interface FeedbackResult { totalCount: number; page: number; totalPages: number; entries: FeedbackEntry[]; } export async function getSellerFeedback( client: VintedClient, userId: number, country: Country = 'fr', perPage = 20, page = 1, ): Promise<FeedbackResult> { const qs = new URLSearchParams({ user_id: String(userId), per_page: String(Math.min(perPage, 100)), page: String(page), }); const data = await client.apiGet<{ user_feedbacks?: any[]; pagination?: { total_entries?: number; total_pages?: number; current_page?: number }; }>(country, `/api/v2/feedbacks?${qs.toString()}`); const entries: FeedbackEntry[] = (data.user_feedbacks ?? []).map((f) => ({ id: Number(f.id), createdAt: String(f.created_at_ts ?? f.created_at ?? ''), feedback: String(f.feedback ?? ''), rating: Number(f.rating ?? 0), feedbackRate: Number(f.feedback_rate ?? 0), itemId: f.item_id != null ? Number(f.item_id) : null, fromUsername: String(f.user?.login ?? f.comment?.user?.login ?? ''), fromUserId: Number(f.feedback_user_id ?? 0), isSystem: Boolean(f.system_feedback), })); return { totalCount: data.pagination?.total_entries ?? entries.length, page: data.pagination?.current_page ?? page, totalPages: data.pagination?.total_pages ?? 1, entries, }; }