TW1 <GO> TARGETWATCH 2 <GO>MARKETLIVE
API

API

TargetWatch provides structured Nordic stock data through an API. Retrieve analyst price targets, target changes, analyst houses and insider trades as JSON over HTTPS.

Get a key

Create and manage your keys right here:

Authentication

Send your key as a Bearer token in the Authorization header:

GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/stocks"

Requests without a valid key return 401.

Plans and rate limits

FREE

$0

10 REQUESTS PER DAY

  • All stocks we have data for
  • Current consensus for any ticker
  • Analyst houses

EVERYTHING INCLUDED

API PLUS

$1/month

1,000 REQUESTS PER HOUR

  • Everything in Free
  • Full price-target history
  • Targets feed and changes
  • Insider trades

Every response includes your tier and rate-limit status:

  • X-API-Tier: free or pro
  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

When the limit is exceeded you get 429 with a Retry-After header.

Buying API Plus

  1. Log in (or create an account) via the button in the top right.
  2. Open the key section on this page and choose API Plus in the pricing cards.
  3. Pay by card - the subscription is $1/month and your key is upgraded to 1,000 calls per hour immediately.

Manage or cancel your subscription anytime under My page.

Payments processed by Stripe.

Free endpoints

GET /api/v2/analysts FREE

The analyst houses we track. Available on every plan.

ROW FIELDS:

slughouse
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/analysts"
200 OK - ONE ROW SHOWN
[
  { "slug": "abg-sundal-collier", "house": "ABG Sundal Collier" },
  { "slug": "aktiespararna", "house": "Aktiespararna" },
  ...
]
GET /api/v2/stocks FREE

All covered stocks. Available on every plan.

ROW FIELDS:

tickerstockmarketlistsectorindustrycountrycurrency
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/stocks"
200 OK - ONE ROW SHOWN
[
  {
    "ticker": "8TRA",
    "stock": "Traton",
    "market": "Stockholmsbörsen",
    "list": "Large Cap",
    "sector": "Industrials",
    "industry": "Farm & Heavy Construction Machinery",
    "country": "sweden",
    "currency": "SEK"
  },
  ...
]
GET /api/v2/stocks/{ticker}/targets FREE

Current median target for one stock: latest price, median target, upside, and the individual houses behind it. Available on every plan, for any ticker.

ROW FIELDS:

tickerstockcurrencydatemedianTargetlatestPricelatestPriceDateupsidePcthouses[]

PARAMETERS:

NameTypeRequiredMeaningExample
tickerstringRequiredTicker used to select one stock.VOLV-B
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/stocks/VOLV-B/targets"

API Plus endpoints

GET /api/v2/stocks/{ticker}/targets/history API PLUS

Full price-target history for one stock, newest first.

ROW FIELDS:

idhousepriceTargetcurrencydate

PARAMETERS:

NameTypeRequiredMeaningExample
fromdateOptionalInclusive start date (YYYY-MM-DD).2026-01-01
todateOptionalInclusive end date (YYYY-MM-DD).2026-09-18
tickerstringRequiredTicker used to select one stock.VOLV-B
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/stocks/VOLV-B/targets/history?from=2026-01-01&to=2026-09-18"
200 OK - ONE ROW SHOWN
[
  { "id": 33308, "house": "Jefferies", "priceTarget": 370, "currency": "SEK", "date": "2026-09-15" },
  { "id": 33192, "house": "Morgan Stanley", "priceTarget": 355, "currency": "SEK", "date": "2026-09-04" },
  ...
]
GET /api/v2/targets API PLUS

The global feed of price targets, newest first.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydate

PARAMETERS:

NameTypeRequiredMeaningExample
fromdateOptionalInclusive start date (YYYY-MM-DD).2026-01-01
todateOptionalInclusive end date (YYYY-MM-DD).2026-09-18
housestringOptionalCase-insensitive house filter.dnb-carnegie
tickerstringOptionalExact ticker matchVOLV-B
limitintegerOptionalRows per page; 1-500 (default 100).100
cursorstringOptionalnextCursor from the previous response.MTAw
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/targets?from=2026-09-01&house=dnb-carnegie&limit=100"
200 OK - ONE ROW SHOWN
{
  "items": [
    {
      "id": 33368,
      "ticker": "ORSTED",
      "stock": "Ørsted",
      "house": "ABG Sundal Collier",
      "priceTarget": 180,
      "currency": "DKK",
      "date": "2026-09-18"
    },
    ...
  ],
  "total": 28610,
  "nextCursor": "MTAw"
}
GET /api/v2/targets/{id} API PLUS

One complete price-target record.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydatelink

PARAMETERS:

NameTypeRequiredMeaningExample
idintegerRequiredTarget record ID.33368
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/targets/33368"
200 OK
{
  "id": 33368,
  "ticker": "ORSTED",
  "stock": "Ørsted",
  "house": "ABG Sundal Collier",
  "priceTarget": 180,
  "currency": "DKK",
  "date": "2026-09-18",
  "link": "https://www.placera.se/telegram/dagens-aktierekommendationer-i-oversikt-20260918"
}
GET /api/v2/targets/changes API PLUS

New price targets for polling.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydate

PARAMETERS:

NameTypeRequiredMeaningExample
sincedateRequiredRequired start date (YYYY-MM-DD); maximum lookback is 31 days.2026-09-12
limitintegerOptionalRows per page; 1-500 (default 100).100
cursorstringOptionalnextCursor from the previous response.MTAw
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/targets/changes?since=2026-09-12"
200 OK - ONE ROW SHOWN
{
  "items": [
    {
      "id": 33368,
      "ticker": "ORSTED",
      "stock": "Ørsted",
      "house": "ABG Sundal Collier",
      "priceTarget": 180,
      "currency": "DKK",
      "date": "2026-09-18"
    },
    ...
  ],
  "total": 12,
  "nextCursor": "MTAw"
}
GET /api/v2/stocks/{ticker}/insider-trades API PLUS

Insider transactions for one stock.

RESPONSE ENVELOPE:

dataAsOfitemstotal

ROW FIELDS:

tickerstockpersonroletypevolumepricecurrencytotalValuepublicationDatetransactionDatestatusroleTitlecategorymarketImpactissuerleinotifierrelatedPartycorrectioncorrectionDescriptioninitialNotificationlinkedToShareProgrammenatureinstrumentTypeinstrumentisinunittradingVenue

PARAMETERS:

NameTypeRequiredMeaningExample
statusenumOptionalFI-source status values: Aktuell, Reviderad, Makulerad. The default excludes Makulerad; use all to include cancelled notices.all
categoryenumOptionalTransaction category: market-buy, market-sell, off-market-buy, off-market-sell, redemption, grant, subscription, gift, internal, or other.market-buy
marketImpactenumOptionalAllowed values: buy-pressure, sell-pressure, no-pressure.buy-pressure
tickerstringRequiredTicker used to select one stock.VOLV-B
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/stocks/VOLV-B/insider-trades"
200 OK - ONE ROW SHOWN
{
  "dataAsOf": "2026-05-22",
  "total": 2,
  "items": [
    {
      "ticker": "VOLV-B",
      "stock": "Volvo",
      "person": "Bo Annvik",
      "role": "board_member",
      "type": "buy",
      "volume": 1757,
      "price": 284.3,
      "currency": "SEK",
      "totalValue": 499515,
      "publicationDate": "2025-11-27",
      "transactionDate": "2025-11-27",
      "status": "Aktuell"
    },
    ...
  ]
}
GET /api/v2/insider-trades API PLUS

The global insider-trading feed, newest first. Source-specific fields are included when available.

RESPONSE ENVELOPE:

dataAsOfitemstotalnextCursor

ROW FIELDS:

tickerstockpersonroletypevolumepricecurrencytotalValuepublicationDatetransactionDatestatusroleTitlecategorymarketImpactissuerleinotifierrelatedPartycorrectioncorrectionDescriptioninitialNotificationlinkedToShareProgrammenatureinstrumentTypeinstrumentisinunittradingVenue

PARAMETERS:

NameTypeRequiredMeaningExample
fromdateOptionalPublication start date, inclusive (YYYY-MM-DD).2026-01-01
todateOptionalPublication end date, inclusive (YYYY-MM-DD). Must be on or after from; otherwise the request returns 400.2026-09-18
tickerstringOptionalExact ticker matchVOLV-B
typeenumOptionalTransaction type: buy, sell, or other.buy
statusenumOptionalFI-source status values: Aktuell, Reviderad, Makulerad. The default excludes Makulerad; use all to include cancelled notices.all
categoryenumOptionalTransaction category: market-buy, market-sell, off-market-buy, off-market-sell, redemption, grant, subscription, gift, internal, or other.market-buy
marketImpactenumOptionalAllowed values: buy-pressure, sell-pressure, no-pressure.buy-pressure
limitintegerOptionalRows per page; 1-500 (default 100).100
cursorstringOptionalnextCursor from the previous response.MTAw
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v2/insider-trades?type=buy&limit=100"
200 OK - ONE ROW SHOWN
{
  "dataAsOf": "2026-05-22",
  "items": [
    {
      "ticker": "CHEF",
      "stock": "Cheffelo",
      "person": "Adam Björklund",
      "role": "management",
      "type": "buy",
      "volume": 1100,
      "price": 119.6,
      "currency": "SEK",
      "totalValue": 131560,
      "publicationDate": "2026-05-22",
      "transactionDate": "2026-05-22",
      "status": "Aktuell"
    },
    ...
  ],
  "total": 2199,
  "nextCursor": "MTAw"
}

Pagination

Feed endpoints (targets, targets/changes, insider-trades) return at most limit items per call (default 100, max 500):

{ "items": [ ... ], "total": 7792, "nextCursor": "MTAw" }

Pass nextCursor back as cursor until it comes back null.

Feed rows carry ticker: null when the company is Nordic but not yet in our catalog. Match on stock (company name) until it is added. Companies reviewed as non-Nordic are not returned in the feed.

Errors

  • 400 - invalid parameter (bad date, cursor, limit, or a since beyond 31 days)
  • 401 - missing or invalid API key
  • 403 - valid key, but the endpoint requires API Plus
  • 404 - unknown house or target id (insider endpoints return 200 with an empty items list for an unknown ticker)
  • 429 - rate limit exceeded, see Retry-After

License

The data is licensed for your internal use. You may build products, analysis and decisions on it. You may not redistribute the raw data, resell it, or expose it as a competing data service. Reach out if you need redistribution rights.