Vinotify Logovinotify
Login

Developer docs

Connect Vinotify to a poller, bot, coding agent, or compatible MCP client. The integration surface reads the same Vinted alerts as the dashboard and does not require a Vinted login.

Integrations require the Pro plan. See pricing for plan details. This page is currently English-only; localized documentation is a follow-up.

Authentication

Sign in, open Integrations, and create a token with a name. Write access is off by default. A token is account-scoped: it covers the searches your account owns now and searches you create later.

The token value is returned only in the create response. Vinotify stores a one-way digest, so the full value is not returned by the token list route. Treat it like a password: keep it in a local environment variable or secret store, never in a URL, chat, log, or committed file.

Authorization: Bearer YOUR_TOKEN

Read access is available with every integration token. A token created with write access has can_write: true; the MCP write tools also require the server-side write feature to be enabled. Revoking a token from Integrations, or with either revoke route below, makes it unusable.

POST /api/v1/integrations/tokens/{token_id}/revoke
DELETE /api/v1/integrations/tokens/{token_id}/revoke

MCP

The hosted MCP endpoint is a stateless JSON-RPC endpoint. Send POST requests with JSON and the bearer header; it returns application/json. It supports MCP protocol versions 2025-06-18, 2025-03-26, and 2024-11-05.

{
  "mcpServers": {
    "vinotify": {
      "url": "https://vinotify.me/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

For a client that uses the standard JSON-RPC flow, call initialize, then tools/list, and use tools/call for a tool. Notifications are accepted without a response body.

MCP read tools and parameters
ToolParameters
list_searchesNo arguments. Returns active searches with id, name, market, active, last_checked, and an account_fingerprint.
get_new_itemssearch_id (required integer); cursor (string, default 0-0, max 64 characters); wait (integer 0–30, default 0); limit (integer 1–100, default 25).
whats_newcursors (object of string cursors); since_minutes (integer 1–2880, default 60); limit_per_search (integer 1–25, default 10); wait (integer 0–30, default 0).

Write tools are exposed only for a write-scoped token while the server write flag is enabled:

MCP write tools and parameters
ToolParameters
create_searchname and search_text are required. Optional: market (default uk), price_from, price_to, brand_filter, size_filter, excluded_keywords, included_keywords, blocked_sellers, condition_filter.
update_searchsearch_id is required. Optional: name, search_text, price_from, price_to, brand_filter, size_filter, excluded_keywords, included_keywords, blocked_sellers, condition_filter.
pause_searchsearch_id (required positive integer).
resume_searchsearch_id (required positive integer).

create_search.market accepts these verified market codes: uk, ie, fr, de, es, it, nl, be, at, lu, pt, us, au, pl, cz, se, dk, fi, gr, hr, hu, ro, si, sk, ee, lv, lt. Its filter field bounds are: name up to 100 characters; search_text up to 200; price fields from 0 to 10000; brand up to 200; size and blocked_sellers up to 500; excluded and included keywords up to 300; condition_filter up to 10 strings.

REST

Dashboard token-management routes use the authenticated dashboard user. Discovery and event routes use the bearer header shown above.

Vinotify integration REST endpoints
Method and pathAuth and purpose
POST /api/v1/integrations/tokensDashboard session. Body: name and optional allow_writes.
GET /api/v1/integrations/tokensDashboard session. Lists token metadata; not the raw token.
GET /api/v1/integrations/activityDashboard session. Returns recent assistant write audit entries.
POST or DELETE /api/v1/integrations/tokens/{token_id}/revokeDashboard session. Revokes a token.
GET /api/v1/integrations/searchesBearer token. Legacy all-owned search discovery.
GET /api/v1/integrations/discovery/v2Bearer token. Active search discovery with account_fingerprint.
GET /api/v1/integrations/eventsBearer token. Event feed; use search_id, cursor, limit, and wait or wait_seconds.
GET /api/v1/integrations/searches/{search_id}/eventsBearer token. Path-form event feed for one search.
GET /api/v1/integrations/searches/{search_id}/webhook/eventsBearer token. Webhook-named alias of the path-form event feed.

For event routes, cursor defaults to 0-0 and is limited to 64 characters; limit defaults to 50 and is capped at 100; wait and wait_seconds are bounded to 30 seconds.

GET https://vinotify.me/api/v1/integrations/events?search_id=42&cursor=0-0&wait=30
Authorization: Bearer YOUR_TOKEN
{
  "schema_version": 2,
  "search_id": 42,
  "events": [
    {
      "schema_version": 2,
      "event_id": "evt_…",
      "detected_at": "2026-09-08T12:00:00+00:00",
      "search_id": 42,
      "item_id": "123456789",
      "search_name": "Nike trainers",
      "market": "uk",
      "currency": "GBP",
      "items": [{
        "id": "123456789",
        "item_id": "123456789",
        "price": 55,
        "currency": "GBP",
        "title": "Nike trainers",
        "url": "https://www.vinted.co.uk/items/123456789"
      }],
      "cursor": "1725796800000-0"
    }
  ],
  "cursor": "0-0",
  "next_cursor": "1725796800000-0",
  "has_more": false
}

Webhooks

Vinotify delivers new items two ways. Push posts each batch to a URL you own as soon as it is found. Pull lets your consumer read an event feed on its own schedule. Push is the lower-latency option; pull is the one that can catch up after downtime. Both require the Pro plan.

Push: outbound POST

Each Pro search has its own webhook secret. Read it, and set the destination that receives deliveries, with these routes. Both authenticate with your dashboard session rather than a bearer token, because they configure the search itself.

Vinotify webhook configuration routes
Method and pathPurpose
GET /api/v1/searches/{search_id}/webhookReturns the search's webhook_secret, its poll_url, and the currently configured external_url.
PUT /api/v1/searches/{search_id}/webhook/external-urlSets or clears the destination that receives POSTs. Body: url. Send an empty string to stop delivery.
GET /api/v1/searches/{search_id}/webhook/latest?secret=…Returns the most recent payload for this search, authenticated by the secret rather than a session. Cached for 24 hours.

The destination must be a public HTTPS endpoint. Vinotify validates it when you save it and again immediately before each delivery, and rejects addresses that resolve to private or internal networks.

Vinotify posts this body when a search finds new items:

POST https://your-endpoint.example.com/vinotify
Content-Type: application/json

{
  "event": "new_items",
  "search_id": 42,
  "search_name": "Carhartt jackets",
  "item_count": 2,
  "items": [ /* matching listings */ ]
}

Push delivery is best effort and is not retried. Respond quickly and queue the work on your side. If you need a guarantee that nothing is missed, run the pull feed below alongside it, or fall back to the /webhook/latest route above.

Pull: the event feed

The bearer-authenticated event feed is the durable option. Poll https://vinotify.me/api/v1/integrations/events, or the per-search route /api/v1/integrations/searches/{search_id}/events, with wait=30 to hold the connection open until something arrives.

Events are delivered at least once, so a retry can repeat an event_id. Deduplicate on that value and persist next_cursor after every response. Streams keep 48 hours of history and 10,000 entries by default; a cursor older than the retained window returns 410 cursor_expired with reset_cursor: 0-0.

The event envelope contains schema_version, event_id, detected_at, search_id, item_id, market, currency, and an items array. Item fields can include id, item_id, price, currency, title, brand, size, condition, condition_code, url, and photo when present.

Limits and errors

  • Default request budget: 240 requests per minute per token.
  • Default concurrent long-poll budget: 12 per token.
  • Write budget: 10 attempted writes per minute and 100 per day per token.
  • MCP discovery and list_searches cap active searches at 50; whats_new caps the combined response at 200 events.
  • These budgets are configurable server-side. The values above are the source defaults.
REST and MCP integration errors
SurfaceVerified errors and recovery
REST401 invalid or revoked token; 403 plan or ownership failure; 400 invalid request or cursor; 404 missing search or token; 409 discovery over 50 active searches; 410 cursor_expired with reset_cursor: 0-0; 422 token validation; 429 rate_limited with Retry-After; 503 feed unavailable.
JSON-RPC-32700 parse error; -32600 invalid request or unsupported batch; -32601 method not found; -32602 invalid params; -32603 internal error.
MCP toolsTool results can report bad_request, invalid_request, not_found, cursor_expired, rate_limited, unavailable, write_not_allowed, write_tools_disabled, too_many_searches, or internal.