NeonDB Media API
Reference
High-throughput media session management, adaptive streaming, and real-time delivery infrastructure. Built for scale — from prototype to production.
All API requests must include a valid API key. Pass it as a Bearer token in the Authorization header, or as the X-Playback-Token header for media session requests.
curl https://api.neondbmain.ru/api/v2/media?offset=0 \ -H "Authorization: Bearer ndb_live_4kXp92mNqR..." \ -H "Cookie: media_sid=sess_abc123" \ -H "X-Playback-Token: pt_eyJhbGci..."
const res = await fetch('https://api.neondbmain.ru/api/v2/media?offset=0', { headers: { 'Authorization': 'Bearer ndb_live_4kXp92mNqR...', 'Cookie': 'media_sid=sess_abc123', 'X-Playback-Token': 'pt_eyJhbGci...' } }); const data = await res.json();
import httpx res = httpx.get( "https://api.neondbmain.ru/api/v2/media", params={"offset": 0}, headers={ "Authorization": "Bearer ndb_live_4kXp92mNqR...", "X-Playback-Token": "pt_eyJhbGci...", }, cookies={"media_sid": "sess_abc123"} )
req, _ := http.NewRequest("GET", "https://api.neondbmain.ru/api/v2/media?offset=0", nil) req.Header.Set("Authorization", "Bearer ndb_live_4kXp92mNqR...") req.Header.Set("X-Playback-Token", "pt_eyJhbGci...") req.AddCookie(&http.Cookie{Name: "media_sid", Value: "sess_abc123"})
🔒 Bearer Token
Standard API key authentication for all server-side requests. Keys are prefixed with ndb_live_ (production) or ndb_test_ (sandbox).
🎬 Playback Token
Short-lived token for media session polling. Scoped to a single session. Expires after 3600s. Renew via POST /v2/media.
| Parameter | Type | Description |
|---|---|---|
| offsetrequired | integer | Sequence offset for ordered delivery. Monotonically increasing integer starting at 0. |
| limitoptional | integer | Max events to return. Default: 50, max: 500. |
| formatoptional | string | Response format: json · msgpack · cbor |
| Header | Value | Description |
|---|---|---|
| Cookierequired | media_sid=<token> | Session identifier. Set by POST /v2/media on creation. |
| X-Playback-Tokenrequired | string | Short-lived playback token. Expires after 3600s. |
| Acceptoptional | application/json | Preferred response media type. |
{
"session_id": "sess_4kXp92mNqR",
"status": "active",
"offset": 0,
"events": [{
"type": "buffer_update",
"timestamp": 1748304000,
"payload": { "buffered_ms": 4200, "bitrate_kbps": 3840, "quality": "1080p" }
}],
"next_offset": 1,
"ttl": 3600
}{
"error": "ERR_INVALID_OFFSET",
"message": "offset must be a non-negative integer",
"request_id": "req_7fGh3kLmNp"
}{
"error": "ERR_SESSION_EXPIRED",
"message": "X-Playback-Token has expired. Refresh via POST /v2/media",
"expires_at": 1748300400
}{
"error": "ERR_RATE_EXCEEDED",
"message": "Rate limit exceeded",
"retry_after": 12
}| Field | Type | Description |
|---|---|---|
| asset_idrequired | string | Unique identifier of the media asset to stream. |
| qualityoptional | string | Initial preset: auto · 360p · 720p · 1080p · 4k |
| drmoptional | object | DRM config. Supports Widevine, FairPlay, PlayReady. |
{
"asset_id": "asset_7fGh3kLmNp",
"quality": "auto",
"drm": { "scheme": "widevine", "license_url": "https://drm.neondbmain.ru/license" }
}{
"session_id": "sess_4kXp92mNqR",
"playback_token": "pt_eyJhbGciOiJIUzI1NiJ9...",
"expires_at": 1748307600,
"set_cookie": "media_sid=sess_4kXp92mNqR; HttpOnly; Secure; SameSite=None"
}{ "error": "ERR_ASSET_NOT_FOUND", "message": "asset_id does not exist" }| Parameter | Type | Description |
|---|---|---|
| session_idrequired | string | Active session identifier from POST /v2/media response. |
| Field | Type | Description |
|---|---|---|
| qualityoptional | string | New quality preset. Applied at next segment boundary. |
| seek_msoptional | integer | Seek to position in milliseconds. |
| playback_rateoptional | float | Playback speed multiplier. Range: 0.25–4.0. |
{ "quality": "720p", "seek_ms": 142000, "playback_rate": 1.5 }Gracefully terminates the session. Buffered data is flushed, DRM licenses are revoked. Returns 204 No Content on success.
// Empty response body{ "error": "ERR_SESSION_NOT_FOUND", "message": "Session does not exist or already terminated" }GET/v2/stream
Chunked streaming endpoint. Long-poll connection, server pushes data frames. Compatible with SSE clients.
GET/v2/segments
Download individual media segments. Supports byte-range requests. Returns binary MPEG-TS or fMP4.
GET/v2/manifest
Adaptive bitrate manifest. Returns HLS .m3u8 or MPEG-DASH .mpd depending on Accept header.
Applied per API key on a rolling 60-second window. Exceeding limits returns 429 Too Many Requests with a Retry-After header.
JavaScript / TypeScript
Python
Go
-
2026-05-12
NEWv2.4.1 — xPadding obfuscation
Tokenish padding for reduced fingerprinting on constrained networks. Configurable via
extra.xPaddingMethod. -
2026-04-03
IMPROVEDv2.4.0 — xmux multiplexing
Session multiplexing now supports up to 16 concurrent streams per connection. Connection overhead reduced by ~40%.
-
2026-02-18
NEWv2.3.0 — Adaptive bitrate via polling
GET /v2/media now returns ABR ladder recommendations based on observed throughput metrics.
-
2025-11-30
DEPRECATEDv1 endpoints sunset
/api/v1/* endpoints will be removed on 2026-06-01. See migration guide.