Skip to content

API reference

Trading intelligence

Generate trading cards: a symbol, a direction, price levels, recent news and indicators.

Generate trading cards

POST/api/v1/trading/cards
API keyscope trading:cards

Returns up to `count` trading cards. Each card has a symbol, a BUY or SELL recommendation, a confidence score, price levels, up to three news items and technical indicators. Cards come from the same generator as the Terminal stock deck, without your portfolio as context.

Known issue

Requests that pass the API-key checks currently fail with 401. This endpoint forwards to an internal route that expects a signed-in session, and the forwarded request does not carry one. The failed call still counts against your rate limit and monthly quota. This page will say so when it is fixed.

Request

JSON body

FieldDescription
countintegerMost cards to return, 1 to 20. Fewer may come back; see the notes.default 10 · 1 to 20
riskTolerancestringValidated and echoed in metadata.riskTolerance. The generator does not currently read it.one of "low", "medium", "high" · default "medium"
buyingPowernumberCapital available, 0 to 10,000,000. Validated, then forwarded; the generator does not currently read it.0 to 10000000
excludeSectorsarray of stringForwarded; the generator does not currently read it.default []
preferredSectorsarray of stringForwarded; the generator does not currently read it.default []

Response

200 The cards and request metadata.

FieldDescription
cardsarray of objectZero or more cards.
cards[].symbolstringTicker.
cards[].companyNamestringCompany name.
cards[].recommendationstring"BUY" or "SELL". "HOLD" only when the generator returned no direction.
cards[].confidencenumberA 0 to 1 signal score from the technical inputs on the card. It is not a calibrated probability and has no floor: values below 0.4 are normal and mean the setup is weak. 0.5 when the generator returned none. Do not size positions from it.
cards[].currentPricenumberLast price.
cards[].targetPricenumberSuggested target.
cards[].stopLossnumberSuggested stop.
cards[].takeProfitnumberSuggested take-profit.
cards[].priceChangenumberChange on the day.
cards[].priceChangePercentnumberChange on the day, in percent.
cards[].analysisstringThe written reasoning for the card.
cards[].sentimentstringNews sentiment, when available.
cards[].newsarray of objectUp to three recent items.
cards[].news[].titlestringHeadline.
cards[].news[].summarystringSummary, when the source provides one.
cards[].news[].sourcestringPublisher or data provider.
cards[].news[].publishedAtstringPublication time as the provider reports it.
cards[].news[].urlstringLink to the article.uri
cards[].technicalIndicatorsobjectIndicators the card was built from, such as rsi, macd, movingAverage50, movingAverage200 and volume.
cards[].cardTypestringCard kind. "standard" unless the generator says otherwise.
cards[].generatedAtstringWhen the card was built.date-time
metadataobjectRequest metadata.
metadata.totalCardsintegerNumber of cards returned.
metadata.responseTimeintegerMilliseconds this request took, measured by the API.
metadata.cacheHitbooleanWhether the generator served the deck from cache.
metadata.providersUsedarray of stringData providers the generator reported.
metadata.riskTolerancestringThe value you sent.
metadata.environmentstringThe key's environment.one of "live", "test"
Example response
{
  "cards": [
    {
      "symbol": "AAPL",
      "companyName": "Apple Inc.",
      "recommendation": "BUY",
      "confidence": 0.62,
      "currentPrice": 175.43,
      "targetPrice": 184.2,
      "stopLoss": 171.1,
      "takeProfit": 184.2,
      "analysis": "...",
      "news": [
        {
          "title": "...",
          "source": "...",
          "publishedAt": "...",
          "url": "https://example.com/article"
        }
      ],
      "technicalIndicators": {
        "rsi": 58.1
      },
      "cardType": "standard",
      "generatedAt": "2026-10-23T14:02:11.093Z"
    }
  ],
  "metadata": {
    "totalCards": 1,
    "responseTime": 3120,
    "cacheHit": false,
    "providersUsed": [],
    "riskTolerance": "medium",
    "environment": "live"
  }
}

Errors

StatusWhenerror
403The key has neither "trading:cards" nor "*".Insufficient permissions. Required scope: trading:cards
400count is outside 1 to 20.Invalid count. Must be between 1 and 20
400riskTolerance is another value.Invalid riskTolerance. Must be "low", "medium", or "high"
400buyingPower is outside the range.Invalid buyingPower. Must be between 0 and 10,000,000
500The generator failed, or the body was not valid JSON.Failed to generate trading cards. Please try again.

Errors use the standard error body. Any request can also get the authentication errors (401) and the rate-limit error (429).

Examples

curl -X POST "https://enton.ai/api/v1/trading/cards" \
  -H "Authorization: Bearer $ENTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "count": 5,
    "riskTolerance": "medium",
    "buyingPower": 10000
  }'

Notes

  • count is an upper bound. Symbols with no actionable setup are left out rather than returned with empty levels, so a response can hold fewer cards than you asked for, occasionally none. An empty cards array is a valid response.
  • Fields a provider did not supply are left out, never zero-filled. Treat a missing field as unknown. The exceptions are recommendation and confidence, which have the defaults described above.
  • Cards are analysis, not advice, and they are not orders. To trade, use trade execution.