pnl.memedocs

Streaming

New rows pushed as they land, over server-sent events on the same key.

The door

builder plan and up
Server-sent events
GET https://pnl.meme/v1/stream

A browser's EventSource cannot send an Authorization header, and a key does not belong in a page anyway. Stream from your server, and forward what you need.

Channels

A channel is a read you could make yourself: its rows are exactly what that capability answers on POST /v1/skills/run. A row is sent the first time the connection sees it.

ChannelIts rows areThe same read as a toolPlan
earlynetwork.earlyany plan with a stream
matchnetwork.matchany plan with a stream
radarnetwork.radarget_trending_tokensany plan with a stream
smartnetwork.smartget_smart_moneypro plan

Query

ParameterMeans
channelsComma-separated channel names. Absent: every channel your key may have.
snapshot1 sends the board as it stands first, then only what is new.

What arrives

Four kinds of frame. A client that reads event, id and data, and skips comment lines, reads all of them.

text/event-stream
event: open
data: {"channels":["early","radar"]}

event: early
id: <event id>
data: <row>

: ping

event: end
data: {"reason":"lifetime"}
FrameMeans
event: openAlways first: the channels this connection carries.
event: <channel>One new row, its id the event's. The name is the channel's.
: pingA comment that keeps proxies from closing a quiet connection. Skip it.
event: endThe server is closing. reason says why; reconnect.

Connect

curl
curl -N "https://pnl.meme/v1/stream?channels=early,radar&snapshot=1" \
  -H "Authorization: Bearer pnl_..."

Open streams per plan

PlanOpen streams
free0
builder1
pro5
network25
fleet100

A stream ends itself after a fixed lifetime with an end frame. Reconnect then: each open counts one call against the day.

Refusals

HTTPMeans
400A channel this server does not have; the message lists the ones it does.
401No key, or a key that does not authenticate. Streams always need one.
403The plan includes no stream (required_plan names the one that does), or not that channel.
429Every stream the plan holds is already open, or today's allowance is spent.

The partner Data APIs carry streams of their own, resumable by cursor: /v1/fomo/stream and /v1/pump/stream, each on its reference page. Every refusal is the shared error shape.

NORMALsigned outpolling? keys