Product research,
from your terminal.
We at Markt founded a new way to do product research, from the comfort of your own terminal. With any Standard plan, you can use our API to create an AI that can find products for you, see what's selling, and so much more.
$ curl -X POST https://dropsignal-api.onrender.com/v1/analyze \
-H "X-Api-Key: mk_<your_key>" \
-H "Content-Type: application/json" \
-d '{"products": ["portable blender", "led strip lights"]}'
→ {
"count": 2,
"results": [
{ "product": "portable blender", "score": { "value": 84, "label": "scale" } },
{ "product": "led strip lights", "score": { "value": 71, "label": "test" } }
]
}Markt API
The Markt API provides programmatic access to real-time market intelligence. All endpoints return JSON. Authentication is via API key or Clerk JWT.
Base URL
https://dropsignal-api.onrender.comQuick start
1. Get your API key
Sign up for a paid plan, then go to Dashboard → API Keys to generate a key.
2. Make your first request
curl -X POST https://dropsignal-api.onrender.com/v1/analyze \
-H "X-Api-Key: mk_<your_key>" \
-H "Content-Type: application/json" \
-d '{"products": ["portable blender"]}'API keys require a paid plan (Standard, Pro, or Enterprise). Free plan users must authenticate via Clerk JWT from the dashboard.
Authentication
All protected endpoints require one of two auth methods:
API Key (recommended)
Pass your key in the X-Api-Key header. Requires a paid plan.
X-Api-Key: mk_xxxx_yyyy
Clerk JWT
Pass a Clerk session token as a Bearer token. Works on all plans including free.
Authorization: Bearer <jwt>
/v1/api-keys🔒 Clerk JWTCreate a new API key. Requires a paid plan. The full key is returned exactly once — store it securely.
Parameters
labelstringHuman-readable label for this key (default: 'default')Example
curl -X POST https://dropsignal-api.onrender.com/v1/api-keys \
-H "Authorization: Bearer <clerk-jwt>" \
-H "Content-Type: application/json" \
-d '{"label": "production"}'/v1/api-keys🔒 Clerk JWTList all active API keys for your account (metadata only — no secrets returned).
/v1/api-keys/{key_id}🔒 Clerk JWTRevoke an API key by ID. The key is soft-deleted and immediately invalidated.
Analyze Products
The core endpoint. Analyses one or more products and returns a composite market score, trend data, pricing intelligence, and ad saturation metrics.
/v1/analyze🔒 API Key or JWTAnalyse products for market opportunity. Features returned depend on your plan. Batch limit varies by plan (1–25 products).
Parameters
productsstring[]requiredArray of product name strings to analyse (max per batch depends on plan)Example
curl -X POST https://dropsignal-api.onrender.com/v1/analyze \
-H "X-Api-Key: mk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{
"products": ["portable blender", "led strip lights"]
}'
# Response
{
"user_id": "uuid",
"plan": "pro",
"count": 2,
"elapsed_ms": 312,
"results": [
{
"product": "portable blender",
"score": { "value": 84, "label": "scale", "confidence": 0.9 },
"trend": { "status": "rising", "momentum_score": 68 },
"price_range": { "min": 19.99, "max": 89.99, "avg": 34.50 },
"ad_metrics": { "ad_pressure": "low", "saturation_index": 28 },
...
}
]
}/v1/analyze/csv🔒 API Key or JWTEnterprise only: upload a CSV file with a 'product' column. Same pipeline as POST /v1/analyze. Max 5 MB.
Parameters
fileFilerequiredCSV file with a header row containing a 'product' (or 'name' / 'keyword') columnTrending & Opportunities
/v1/trending🔒 API Key or JWTReturns the top products from the last 24h opportunity scan, sorted by score. Optionally filter by category or signal.
Parameters
categorystringSubstring filter on product name (e.g. 'fitness')signalstringFilter by signal level: HIGH_OPPORTUNITY | TEST_SOON | WATCHLIST | LOWlimitintegerMax results to return (1–100, default 30)/v1/opportunities🔒 API Key or JWTEnterprise: returns pre-ranked market opportunities from the last 24-hour background scanner, sorted by score descending.
Parameters
limitintegerMax results (1–200, default 50)/v1/random-product🔒 API Key or JWTReturns random product name suggestions from the opportunities seed file. Zero-cost, instant response — no analysis performed.
Parameters
countintegerNumber of products to return (1–20, default 1)Niche Intelligence
Analyse an entire product category rather than a single SKU. Discovers the top products within the niche, runs individual market analyses, and returns an aggregate report.
/v1/niche🔒 API Key or JWTStandard+ required. Discover top products in a niche and return aggregated market intelligence: entry difficulty, market size, best opportunity product, and dominant signals.
Parameters
nichestringrequiredMarket niche or category (e.g. 'home office accessories', 'pet wellness')depthstring'surface' = 3 products ~15s (Standard+), 'deep' = 8 products ~50s (Pro+). Default: 'surface'Example
curl -X POST https://dropsignal-api.onrender.com/v1/niche \
-H "X-Api-Key: mk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{"niche": "home office accessories", "depth": "surface"}'Keyword Intelligence
/v1/keywords🔒 API Key or JWTStandard+ required. Returns the primary keyword CPC estimate plus related keywords from Google Trends and Serper data, each rated by advertising opportunity score.
Parameters
productstringrequiredProduct or keyword term to research (2–200 chars)Store Scanner
/v1/store-scan🔒 API Key or JWTPro+ required. Scan a competitor's Shopify store via its public API, analyse its top products, and surface which items score best and which are over-saturated.
Parameters
urlstringrequiredShopify store URL (e.g. https://yourcompetitor.com)Example
curl -X POST https://dropsignal-api.onrender.com/v1/store-scan \
-H "X-Api-Key: mk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{"url": "https://example-store.myshopify.com"}'Watchlist
Enterprise plan required for all watchlist endpoints.
/v1/watch🔒 API Key or JWTAdd products to your watchlist. Products are re-analysed hourly. You receive an alert when score increases by 10+ points.
Parameters
productsstring[]requiredArray of product name strings to watch (max 100)/v1/watch🔒 API Key or JWTList all products on your watchlist with their last known score and check timestamp.
/v1/watch/{product_name}🔒 API Key or JWTRemove a product from your watchlist.
/v1/alerts🔒 API Key or JWTList recent score-change alerts for your watchlist products, sorted by most recent.
Parameters
limitintegerMax alerts to return (1–200, default 50)Billing
/v1/billing/checkout🔒 Clerk JWTCreate a Stripe Checkout session for a subscription upgrade. Returns a URL to redirect the user to.
Parameters
planstringrequiredPlan name to upgrade to: standard | pro | enterprisesuccess_pathstringRedirect path after successful payment (default: /dashboard?upgraded=true)/v1/billing/portal🔒 Clerk JWTCreate a Stripe Customer Portal session for managing or cancelling a subscription.
/v1/billing/status🔒 API Key or JWTReturns the current plan, subscription status, billing period end date, and whether the subscription will cancel at period end.
Errors & Rate Limits
400Bad Request — malformed request body or invalid parameters.
401Unauthorized — missing or invalid API key / JWT.
403Forbidden — feature not available on your current plan.
404Not Found — resource (e.g. API key, user) does not exist.
422Unprocessable Entity — validation error (e.g. invalid URL, empty CSV).
429Too Many Requests — rate limit exceeded. Check Retry-After header.
504Gateway Timeout — analysis exceeded the configured timeout (default 90s).
Rate Limits
Default rate limit: 120 requests per 60-second window per user, enforced via a Redis sliding-window counter. Limits are configurable via the RATE_LIMIT and RATE_WINDOW environment variables. When exceeded, the API returns 429 with a Retry-After header indicating when you may retry.