프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. Google로 로그인하면 리뷰를 쓸 수 있어요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Pricewatcha

제작자: pricewatcha버전 0.1.7i★ 1i클라우드에서 실행
레지스트리 이름io.github.pricewatcha/pricewatcha

설치 방법

개요

제작자가 쓴 설명(영어 원문)

Track prices & price history on any online shop, with alerts and an API

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 클라우드에서 실행
  • 전송 방식: Streamable HTTP
  • 카테고리: 온라인 쇼핑몰 및 결제

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

검사 4/4 통과 · 내가 묻는 내용은 제작자 서버(mcp.pricewatcha.com)를 거쳐요

먼저: 어떤 AI를 쓰시나요?

쓰는 앱을 고르면 아래에 단계가 나옵니다.

Claude에 연결할 수 있어요 · 약 2분

키 필요 없음, 설치 필요 없음 · claude.ai나 데스크톱 앱에서 한 번 설정하면 채팅에서 쓸 수 있어요 · 무료 계정은 1개까지

  1. Claude의 Connectors 페이지 열기

    CustomizeConnectors

    CustomizeConnectors1+ Add2https://…3Add4
  2. “+ Add” → “Add custom connector”를 누르고 이 2칸 채우기

    여기서 복사해 Claude의 같은 이름 칸에 붙여 넣고 Continue를 누르세요

    Name · 이름Pricewatcha
    Remote MCP server URL · 주소https://mcp.pricewatcha.com

    Authentication은 Claude가 찾은 그대로 두고 Add를 누르세요

  3. 채팅에서 켜기

    +ConnectorsPricewatcha

  4. 해 보기

    Pricewatcha을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Claude가 Pricewatcha을 쓰고 있다고 하거나 답에 Pricewatcha 도구 이름이 나오면 연결된 거예요

메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

ChatGPT는 기업용 요금제에서만 연결돼요

웹의 ChatGPT Business, Enterprise, Edu에서 워크스페이스 관리자나 소유자가 추가해요 · Free, Plus, Pro를 쓰면: 내 ChatGPT 요금제로는 아직 MCP를 직접 연결할 수 없어요

  1. 웹 ChatGPT에서 MCP 추가 페이지 열기

    Plugins+Add custom MCP server

    ChatGPTPlugins1+2https://…3Create4
  2. 이름과 주소 입력

    이름을 넣고 Connection에 주소를 붙여 넣은 뒤 경고에 체크하고 Create as a plugin을 누르세요

    Name · 이름Pricewatcha
    Connection · 주소https://mcp.pricewatcha.com
  3. 채팅에서 Pricewatcha 고르기

    새 채팅을 열고 입력 전에 플러그인 목록에서 Pricewatcha을 고르세요

  4. 해 보기

    Pricewatcha을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ ChatGPT가 Pricewatcha을 쓰고 있다고 하거나 답에 Pricewatcha 도구 이름이 나오면 연결된 거예요

메뉴 이름은 2026년 11월 11일에 OpenAI 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

Claude Code에 연결할 수 있어요 · 약 2분

키 필요 없음, 설치 필요 없음

  1. 터미널 열기

    Mac: Command+스페이스를 누르고 Terminal 입력 · Windows: PowerShell 열기

  2. 이 명령을 붙여 넣고 Enter

    claude mcp add --transport http pricewatcha https://mcp.pricewatcha.com
  3. Claude Code에서 /mcp 입력

    Pricewatcha이 목록에 있고 연결됨으로 보이면 돼요

  4. 해 보기

    Pricewatcha을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Claude Code가 Pricewatcha을 쓰고 있다고 하거나 답에 Pricewatcha 도구 이름이 나오면 연결된 거예요

메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

Cursor에 연결할 수 있어요 · 약 2분

키 필요 없음, 설치 필요 없음

  1. 이 버튼으로 Cursor 열기

    Cursor에서 열기

    Cursor가 설치를 확인하면 Install을 누르세요

  2. Cursor에서 AI 채팅을 Agent 모드로 열기

  3. 해 보기

    Pricewatcha을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Cursor가 Pricewatcha을 쓰고 있다고 하거나 답에 Pricewatcha 도구 이름이 나오면 연결된 거예요

메뉴 이름은 2026년 11월 11일에 Cursor 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

VS Code에 연결할 수 있어요 · 약 2분

키 필요 없음, 설치 필요 없음

  1. 이 버튼으로 VS Code 열기

    VS Code에서 열기

    VS Code가 설치를 확인하면 Install을 누르세요

  2. VS Code에서 AI 채팅을 Agent 모드로 열기

  3. 해 보기

    Pricewatcha을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ VS Code가 Pricewatcha을 쓰고 있다고 하거나 답에 Pricewatcha 도구 이름이 나오면 연결된 거예요

메뉴 이름은 2026년 11월 11일에 VS Code 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

Windsurf, Zed, Gemini CLI 같은 다른 MCP 앱은 추가 방법이 저마다 달라요. 앱 목록에서 확인하세요

MCP를 쓰는 앱 모두 보기 →

웹으로 연결하는 앱용 주소

주소https://mcp.pricewatcha.com

JSON 설정은 아래 “개발자용”에 있어요

막혔나요? Pricewatcha을 쓰는 사람에게 물어보세요💬 토론 →
개발자용: 터미널 명령과 JSON 설정

웹으로 연결

Claude Code

claude mcp add --transport http pricewatcha https://mcp.pricewatcha.com

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "pricewatcha": {
      "url": "https://mcp.pricewatcha.com"
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "pricewatcha": {
      "type": "http",
      "url": "https://mcp.pricewatcha.com"
    }
  }
}

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

한눈에 보기

주간 다운로드i
npm/PyPI에 없음
라이선스i
라이선스 표시 없음
연결 방식
클라우드에서 실행
전송 방식
streamable-http
최신 버전i
0.1.7
레지스트리 공개i
2026년 9월 8일
코드 마지막 변경i
2026년 10월 27일
제작자
pricewatcha
레지스트리 상태
활성

어떤 앱에서 쓸 수 있나요

이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.

인터넷으로 연결하는 앱

ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

모든 앱과 장단점 →

할 수 있는 일

도구 이름과 설명은 서버가 2026년 11월 9일에 알려 준 그대로예요. 우리가 아니라 제작자가 쓴 글이고, 일반 텍스트로만 보여 드려요.

  • get_api_status

    Check whether the Pricewatcha public API is available. Returns health and discovery metadata. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, and error.retry_after_seconds.

  • track_product

    Submit a public product URL for price tracking. Waits up to ~25s server-side; fast shops return status "completed" with product in one call. Slow jobs return status "running" with job_id — poll get_job_status. On failure, returns a structured error object with fields error.code,

  • get_job_status

    Poll an async tracking job by job_id. Returns status (queued, running, completed, or failed). On completion, product is populated; on scrape failure, error is populated (HTTP 200 job lookup — not a transport error). On failure, returns a structured error object with fields error.

  • get_product

    Get structured product price intelligence by product_id (e.g. demo_iphone_15_pro or prod_xxx from a completed job). On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, and error.retry_after_seconds.

  • get_price_history

    Get historical prices, aggregates (low/high/average), trend, and data points for a product. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, and error.retry_after_seconds.

  • search_products

    Searches the Pricewatcha product catalog by keyword (token AND; word order does not matter). Supports minus-prefixed exclude terms: e.g. "iPhone 15 -cover -case" returns devices only. Returns product-level data only — not user accounts or alert settings. On failure, returns a str

  • create_price_alert

    Create a price alert for a product. Use notify_on_drop / notify_on_rise for any price change without a numeric threshold, and/or min_threshold_price / max_threshold_price for target prices. At least one of those four settings is required. Requires a Pricewatcha API key (pwk_live_

  • list_price_alerts

    List your price alerts. Optionally filter by product_id. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, a

  • get_price_alert

    Get one price alert by alert_id. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, and error.retry_after_sec

  • update_price_alert

    Update a price alert. You can switch to threshold-free notify_on_drop / notify_on_rise, change thresholds, or toggle is_active. At least one setting must remain. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a str

  • delete_price_alert

    Delete a price alert. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recommended, and error.retry_after_seconds.

  • watch_product

    Add a catalog product to your account watchlist so the price scheduler keeps updating it. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_s

  • unwatch_product

    Remove a product from your account watchlist. Fails while an active price alert exists for the product. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message

  • list_watchlist

    List products your account watches for continuous price updates. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_recomm

  • get_watch_status

    Check whether your account watches a product for continuous updates. Requires a Pricewatcha API key (pwk_live_...) from https://pricewatcha.com/profile#api-keys. On failure, returns a structured error object with fields error.code, error.message, error.http_status, error.retry_re

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 11일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 pricewatcha 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • ✓ 통과

    계속 관리되고 있음

    코드 마지막 변경: 15일 전

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • ✓ 통과

    엔드포인트 응답

    257ms 만에 응답(HTTP 200)

  • – 해당 없음

    OAuth로 로그인

    로그인 필요 없음

  • ✓ 통과

    도구 설명에 숨겨진 지시 없음

    도구 설명 15개를 읽었고, AI에게 보내는 숨겨진 지시는 없었어요

토론

질문하고, 팁을 나누고, 안 되는 점을 알려 주세요. "도움이 됨"이 많은 순서예요.

아직 글이 없어요. 처음으로 질문하거나 공유해 보세요.

이곳의 글은 사용자가 쓴 것으로, PopNx 팀의 글이 아니에요.

Google로 로그인하고 글쓰기

사용자 리뷰

아직 리뷰가 없어요

Google로 로그인하고 리뷰 쓰기

온라인 쇼핑몰 및 결제 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 2696개 중 89%보다 스타가 많아요
  • 이 카테고리의 다른 서버 2696개 중 31%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 2696개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Pricewatcha, 안전한가요?

해당하는 기본 점검 4개 중 4개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 15일 전 변경됐고, 최신 버전(0.1.7)은 2개월 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되므로 원격 MCP를 지원하는 앱에서도 쓸 수 있어요. 예: ChatGPT Business 이상.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Spree Commerce developer docs for AI agents, Stripe MCP, Sessy — Amazon SES observability

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Spree Commerce developer docs for AI agents

Spree Commerce docs for AI coding agents: build headless B2B and marketplace ecommerce on its APIs.

제작자: spree널리 사용됨★ 1.6만 저장소 전체의 별12일 전 업데이트

클라우드에서 실행

Stripe MCP

MCP server integrating with Stripe - tools for customers, products, payments, and more.

제작자: stripe널리 사용됨★ 2.1천13개월 전 업데이트

클라우드에서 실행✓ stripe.com

Sessy — Amazon SES observability

Read-only Amazon SES observability: search events, inspect bounces, pull delivery stats.

제작자: marckohlbrugge성장 중★ 9453개월 전 업데이트

클라우드에서 실행

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

Pricewatcha API

The Pricewatcha API is the Structured Product Price Intelligence Platform for developers, automation and AI Agents.

The Pricewatcha API derives from the pricewatcha.com application. It provides price tracking, alerts and product intelligence beyond the Pricewatcha dashboard. This repository documents the public HTTP API, OpenAPI schema, official SDKs, MCP server and examples. It does not contain the production web application or scrapers.

Status: Available · Version: v1 · Base URL: https://pricewatcha.com/api/v1

Interactive API keys (browser): Profile & API Keys


Optional: verify connectivity with GET https://pricewatcha.com/api/v1/health. Then pick one of the three paths below.

Quickstart
Path 1: Browse prices (no auth)

Use demo product IDs from the demo catalog or search the catalog:

curl -s "https://pricewatcha.com/api/v1/products/demo_iphone_15_pro"

curl -s "https://pricewatcha.com/api/v1/search?q=iphone+15&limit=10"

Search is case-insensitive token AND (all terms must appear; word order does not matter). Results include the full Pricewatcha catalog, not only URLs submitted via POST /track. Use product_id from search for product and price-history endpoints (prod_* or demo_*).

Path 2: Track a product and get price history
curl -s -X POST "https://pricewatcha.com/api/v1/track" \

-H "Content-Type: application/json" \ -d '{"url": "https://www.backmarket.de/de-de/p/example-product"}'

curl -s "https://pricewatcha.com/api/v1/products/{productId}/price-history"

POST /track returns HTTP 200 with a bounded server-side long-poll (~25s). Use product_id from the response for price history. Optional: send Authorization: Bearer pwk_live_… for higher track, search and product-read quotas.

Fast shops return status: "completed" with the full product in one call. Slow shops return status: "running" with a job_id. Poll GET https://pricewatcha.com/api/v1/jobs/{jobId} until the job is completed or failed. More detail: Async track & poll.

Path 3: Price alert with webhook (API key required)

Create a key in Profile & API Keys, then:

curl -s -X POST "https://pricewatcha.com/api/v1/alerts" \

-H "Authorization: Bearer pwk_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "product_id": "prod_a1b2c3d4e5", "notify_on_drop": true, "min_threshold_price": 500.00, "webhook_url": "https://your-n8n-instance.com/webhook/abc", "notify_email": true }'

For authentication and data boundaries, see Authentication and Data boundaries.


Authentication

No credential required for catalog search, product detail, price history and async track/poll. Without a key those endpoints use anonymous rate limits. Send an API key to use the higher per-account track, search and product-read quotas.

Protected API v1 endpoints (alerts, webhooks, authenticated track callbacks) use:

Authorization: Bearer pwk_live_…
CredentialFormatWhen to use
API keypwk_live_…Recommended for scripts, agents, n8n and server integrations. Create in Profile & API Keys.
Login session tokenJWT from POST https://pricewatcha.com/api/auth/loginWebsite UI and headless key bootstrap only

Do not use the login session token for alerts, webhooks or other API v1 calls once you have an API key.

See Access model for which routes are public vs authenticated.


API keys (browser)

Log in and open Profile & API Keys to create and manage API keys in your browser. The full secret is shown once at creation.

For agents without a browser, use headless key bootstrap below.

Using your key on protected endpoints:

curl -s -X POST "https://pricewatcha.com/api/v1/alerts" \

-H "Authorization: Bearer pwk_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"product_id": "prod_a1b2c3d4e5", "notify_on_drop": true}'


Headless key bootstrap (for agents)

If an agent must obtain API credentials without a browser, authenticate once with the same email and password as on the website, create an API key, then use pwk_live_… for all further calls. This is not a separate agent login: it is the normal Pricewatcha account login exposed as an HTTP endpoint.

How login via API works

POST https://pricewatcha.com/api/auth/login accepts JSON email and password and returns a short-lived access_token (login session token). The Developer page login modal calls the same endpoint; in a script or agent you call it directly with curl or your HTTP client.

  • You need an existing account (register on the site or via POST https://pricewatcha.com/api/auth/register).
  • The email must be verified: otherwise the API returns 403.
  • Wrong credentials return 401.
  • Use access_token only to create keys; for alerts and webhooks use the pwk_live_… key from step 2.

Step 1: Login

curl -s -X POST "https://pricewatcha.com/api/auth/login" \

-H "Content-Type: application/json" \ -d '{"email": "you@example.com", "password": "YOUR_PASSWORD"}'

Response (HTTP 200), AuthResponse:

  • access_token (string): login session token (JWT)
  • token_type (string): always "bearer"
  • user (object): id (string, UUID), email (string), email_verified (boolean)
{

"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "user": { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "email": "you@example.com", "email_verified": true } }

Send the token as Authorization: Bearer in step 2. Session tokens expire; do not store them as the long-term credential for an agent.

Step 2: Create API key

curl -s -X POST "https://pricewatcha.com/api/keys" \

-H "Authorization: Bearer ACCESS_TOKEN_FROM_STEP_1" \ -H "Content-Type: application/json" \ -d '{"name": "agent bootstrap"}'

Response (HTTP 200), CreateApiKeyResponse:

  • id (integer): key ID
  • name (string): label from the request
  • key_prefix (string): first 12 characters of the key (for display)
  • key (string): full secret; returned only on create, not on list
  • is_active (boolean)
  • created_at (string, ISO 8601 datetime)
  • last_used_at (string or null)
  • revoked_at (string or null)
{

"id": 42, "name": "agent bootstrap", "key_prefix": "pwk_live_ab", "key": "pwk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "is_active": true, "created_at": "2026-05-27T14:30:00.123456", "last_used_at": null, "revoked_at": null }

Store key securely. Use it on alerts, webhooks and other protected API v1 endpoints, not the session token from step 1.


API endpoints (overview)
MethodPathAuthDescription
GET/api/v1/health-Health check
GET/api/v1-Discovery and disclaimer
POST/api/v1/track-URL ingestion (long-poll)
GET/api/v1/jobs/{jobId}-Job status
GET/api/v1/products/{productId}-Product intelligence
GET/api/v1/products/{productId}/price-history-History and trend
GET/api/v1/search?q=-Keyword search (limit max 200)
GET/api/v1/openapi.json-Live OpenAPI 3.1
POST/api/auth/login-Login (short-lived session token)
POST/api/keysSession tokenCreate API key
GET / DELETE/api/keys …Session token or keyList / revoke keys
*/api/v1/alerts …API keyPrice alerts
*/api/v1/watchlist / …/watchAPI keyContinuous price watchlist
*/api/v1/webhooks …API keyWebhook subscriptions

Machine-readable contract: openapi/openapi.yaml · Live: GET https://pricewatcha.com/api/v1/openapi.json


Rate limits

Current limits (indicative)

The following limits apply and may change without notice.

ClassEndpointAnonymousAuthenticated (API key)
Track (concurrent)POST /track~2 in-flight jobs~4 in-flight jobs
Track (burst)POST /track~10 jobs / 60s~20 jobs / 60s
Track (hourly)POST /track~40 jobs / hour~120 jobs / hour
Track (daily)POST /track~80 jobs / day~400 jobs / day
Job pollGET /jobs/{id}~40 req/min per clientsame
Search (burst)GET /search~20 req / 60s~40 req / 60s
Search (hourly)GET /search~60 req / hour~180 req / hour
Search (daily)GET /search~200 req / day~1000 req / day
Read (burst)/products, /price-history~60–120 req/min per client~240 req / 60s
Read (hourly)/products, /price-history~180 req / hour~540 req / hour
Read (daily)/products, /price-history~600 req / day~3000 req / day
Health/health and /UnlimitedUnlimited

Send Authorization: Bearer pwk_live_… on POST /track, GET /search, or product reads to use the authenticated tier. Those endpoints remain available without a key at the anonymous limits.

Client identity: anonymous limits are keyed by client IP. Behind Cloudflare the API prefers CF-Connecting-IP over X-Forwarded-For so edge proxy IPs are not treated as distinct clients. The hosted MCP server forwards a stable X-Pricewatcha-Client-Id (OAuth token hash, else connecting-IP hash) with a shared proxy secret so MCP callers are not all bucketed under one egress IP. Authenticated track, search and product-read quotas are keyed by account (owner_id), not IP.

Monitor X-RateLimit-Remaining and honor 429 with exponential backoff. X-RateLimit-Policy names which window the headers refer to (track, track_hourly, track_daily, track_concurrent, job_read, search, search_hourly, search_daily, read, read_hourly, or read_daily).

Track quotas are counted from persisted jobs (api_track_jobs by client key or account), so they apply across multiple app instances. A long-poll that holds the HTTP connection for ~25s still counts as one track job when created — sequential tracks spaced farther apart than 60s will not trip the burst window, but hourly/daily and concurrent caps still apply.

Agents should prefer: start track → poll GET /jobs/{id} with backoff (not every 1–2s) → read product/history once complete. Retrying POST /track with the same URL while that job is still queued/processing reuses the existing job and does not consume another concurrent slot. Jobs left queued/processing longer than the scrape timeout (default 600s) are failed so slots cannot leak across deploys.

Search and product-read quotas are in-memory per app instance (not shared across Railway replicas the way track jobs are). Authenticated callers still get the higher per-account windows. Polling the same catalog queries on a short interval will still trip the hourly/daily search windows.

Exact numbers may change without notice (env overrides: API_V1_TRACK_*, API_V1_TRACK_AUTH_*, API_V1_JOB_READ_*, API_V1_READ_*, API_V1_READ_AUTH_*, API_V1_SEARCH_*, API_V1_SEARCH_AUTH_*).

Headers

When rate limiting is active, responses may include:

HeaderDescription
X-RateLimit-LimitMaximum requests in the window

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요