Briefings & Watchlist Digests
Schedule personal watchlist digests and white-label community briefings, delivered before the open and after the close on every NYSE trading day.
A digest is a scheduled market summary that ApexTick builds and delivers for you. There are two kinds:
| Kind | What it contains | Plans |
|---|---|---|
watchlist | Your own symbols (1–20): price, change, day range, volume and market breadth. | Hobbyist 1 (email only) · Trader Pro 5 · Quant & Community 20 · Enterprise unlimited |
community | A branded briefing for your audience: top gainers, top losers, most active, sector performance at the close, and an optional watchlist. | Quant & Community 1 · Enterprise unlimited, with custom layout |
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /v1/digests | Schedule a digest |
GET | /v1/digests | List digests, last delivery status and quota usage |
DELETE | /v1/digests/{id} | Stop a digest and free its quota slot |
GET | /v1/digests/{id}/preview | Build the digest from current data without sending it |
POST | /v1/digests/{id}/test | Build and deliver the digest immediately |
Schedules
Digests are delivered on NYSE trading days in two slots:
schedules value | Time | Community briefing contents |
|---|---|---|
premarket | 08:30 ET | Top gainers, top losers, most active, plus your watchlist if you set symbols |
close | 16:30 ET | Sector performance of the 11 GICS sector ETFs, top gainers, top losers, most active, plus your watchlist |
- Omit
schedulesto receive both slots. - Weekends and full-day NYSE holidays are skipped automatically. Early-close days still receive both slots.
- Each digest is delivered exactly once per date and slot.
- These are the only two slots; there is no separate daily or weekly schedule. For a once-a-day digest, choose one slot.
The 11 sector ETFs are XLK, XLV, XLF, XLY, XLP, XLE, XLI, XLB, XLU, XLRE and XLC.
Create a digest
/v1/digestsHobbyist+ (watchlist) · Quant+ (community)A white-label community briefing to Discord:
curl -s -X POST "https://api.apextick.com/v1/digests" \
-H "apikey: $APEXTICK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "community",
"name": "Alpha Traders daily",
"brand_name": "Alpha Traders",
"schedules": ["premarket", "close"],
"channel": "discord",
"target": "https://discord.com/api/webhooks/123/abc"
}'
A personal watchlist digest by email, after the close only:
{
"kind": "watchlist",
"name": "Core holdings",
"symbols": ["AAPL", "MSFT", "NVDA", "BTC-USD"],
"schedules": ["close"],
"channel": "email",
"target": "[email protected]"
}
Request fields
| Field | Type | Description |
|---|---|---|
kind | string | Required. watchlist or community. |
name | string | Required. Your label for the digest, up to 80 characters. |
symbols | string[] | Up to 20 symbols. Required for watchlist; optional for community, where it adds a watchlist section. |
schedules | string[] | premarket, close, or both. Default: both. |
channel | string | Required. email, webhook, telegram, discord or slack. The channels follow your plan's alert channels; Hobbyist is email only. |
target | string | Required. Destination, with the same rules as alert targets. |
brand_name | string | Community briefings: the brand shown in the title and as the Discord sender name, up to 60 characters. |
accent_color | string | Enterprise custom layout: hex color such as #1F8B4C, used for the Discord embed and email accents. |
footer | string | Enterprise custom layout: footer text, up to 200 characters, e.g. Not investment advice. |
sections | string[] | Enterprise custom layout: choose and order movers, sectors and watchlist. watchlist requires symbols. |
Using accent_color, footer or sections on a plan without custom layout returns 403. So does creating more digests of a kind than your plan includes; the body includes your limit. For webhook digests the 201 response includes a signing_secret, returned only once.
Delivery formats
The same digest is rendered natively for each channel:
| Channel | Format |
|---|---|
discord | A rich embed with one field per section and your brand as the sender name |
telegram | HTML message with monospace tables |
slack | mrkdwn message with code-block tables |
email | HTML email with a plain-text alternative |
webhook | Signed JSON document; see below |
Long tables are trimmed automatically to fit Discord's and Telegram's message limits.
Webhook delivery
Webhook digests POST the full digest document, the same JSON that preview returns, with these headers:
| Header | Value |
|---|---|
X-ApexTick-Digest-Id | The digest's id |
X-ApexTick-Signature | t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, keyed with the digest's signing_secret |
Verify it exactly like an alert webhook.
Preview
/v1/digests/{id}/previewHobbyist+Builds the digest from current data without sending it. Pass slot=premarket or slot=close; by default you get the closing digest after 12:00 ET and the pre-market briefing before.
{
"type": "digest",
"digest_id": "a3f0c7d2-91b4-4e0f-8c6a-2d7e5b1f9c08",
"kind": "community",
"slot": "close",
"title": "Alpha Traders Closing Bell Digest · Fri Oct 16, 2026",
"brand": "Alpha Traders",
"generated_at": "2026-10-16T20:30:00Z",
"sections": [
{
"heading": "Sector Performance",
"columns": ["Sector", "ETF", "Chg %"],
"rows": [["Technology", "XLK", "+1.84%"], ["Utilities", "XLU", "-0.96%"]],
"note": "Leading: Technology · Lagging: Utilities"
},
{
"heading": "Top Gainers",
"columns": ["Symbol", "Price", "Chg %", "Volume"],
"rows": [["SMCI", "48.92", "+11.37%", "61.2M"]]
}
],
"markdown": "## Alpha Traders Closing Bell Digest · Fri Oct 16, 2026\n…"
}
If one section's data is temporarily unavailable, it carries a note instead of rows; the digest fails only when no section has data.
Send a test
/v1/digests/{id}/testHobbyist+Builds and delivers the digest immediately, with [Test] prefixed to the title, so you can check your channel setup. Accepts the same slot parameter as preview.
| Response | Meaning |
|---|---|
202 Accepted | Delivered: {"status": "sent"} |
429 Too Many Requests | Test sends are limited to one every 5 minutes per digest |
502 Bad Gateway | The destination rejected the delivery; the error explains why |
List and delete
/v1/digestsHobbyist+Returns your active digests with their last delivery status (last_sent_at, last_status, last_error) and usage per kind. A limit of 0 means unlimited, and included: false means your plan doesn't offer that kind.
{
"data": [
{ "id": "a3f0c7d2-…", "kind": "community", "name": "Alpha Traders daily", "symbols": [], "schedules": ["premarket", "close"], "channel": "discord", "target": "https://discord.com/api/webhooks/123/abc", "brand_name": "Alpha Traders", "active": true, "created_at": "2026-10-15T09:12:44Z", "last_sent_at": "2026-10-16T12:30:01Z", "last_status": "delivered" }
],
"quota": {
"watchlist": { "used": 0, "limit": 20, "included": true },
"community": { "used": 1, "limit": 1, "included": true }
}
}
/v1/digests/{id}Hobbyist+Stops the digest and frees its quota slot. Returns 204 No Content.