Introducing Markt API

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.

Trend signals + momentum scoring
Batch analyse up to 100 products
Competitor store intelligence
CSV bulk upload (Enterprise)
terminal
$ 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"  } }
    ]
  }
REST API Reference

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.com

Quick 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>
POST/v1/api-keys🔒 Clerk JWT

Create 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"}'
GET/v1/api-keys🔒 Clerk JWT

List all active API keys for your account (metadata only — no secrets returned).

DELETE/v1/api-keys/{key_id}🔒 Clerk JWT

Revoke 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.

POST/v1/analyze🔒 API Key or JWT

Analyse 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 },
      ...
    }
  ]
}
POST/v1/analyze/csv🔒 API Key or JWT

Enterprise 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') column

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.

POST/v1/niche🔒 API Key or JWT

Standard+ 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

POST/v1/keywords🔒 API Key or JWT

Standard+ 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

POST/v1/store-scan🔒 API Key or JWT

Pro+ 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.

POST/v1/watch🔒 API Key or JWT

Add 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)
GET/v1/watch🔒 API Key or JWT

List all products on your watchlist with their last known score and check timestamp.

DELETE/v1/watch/{product_name}🔒 API Key or JWT

Remove a product from your watchlist.

GET/v1/alerts🔒 API Key or JWT

List recent score-change alerts for your watchlist products, sorted by most recent.

Parameters

limitintegerMax alerts to return (1–200, default 50)

Billing

POST/v1/billing/checkout🔒 Clerk JWT

Create a Stripe Checkout session for a subscription upgrade. Returns a URL to redirect the user to.

Parameters

planstringrequiredPlan name to upgrade to: standard | pro | enterprise
success_pathstringRedirect path after successful payment (default: /dashboard?upgraded=true)
POST/v1/billing/portal🔒 Clerk JWT

Create a Stripe Customer Portal session for managing or cancelling a subscription.

GET/v1/billing/status🔒 API Key or JWT

Returns the current plan, subscription status, billing period end date, and whether the subscription will cancel at period end.

Errors & Rate Limits

400

Bad Request — malformed request body or invalid parameters.

401

Unauthorized — missing or invalid API key / JWT.

403

Forbidden — feature not available on your current plan.

404

Not Found — resource (e.g. API key, user) does not exist.

422

Unprocessable Entity — validation error (e.g. invalid URL, empty CSV).

429

Too Many Requests — rate limit exceeded. Check Retry-After header.

504

Gateway 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.