@audiodn/agent-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/assets/content/instructions.md +48 -0
  4. package/assets/content/partials/auth.md +17 -0
  5. package/assets/content/partials/compatibility.md +10 -0
  6. package/assets/content/partials/playback.md +14 -0
  7. package/assets/content/partials/processing.md +17 -0
  8. package/assets/content/partials/security.md +14 -0
  9. package/assets/content/partials/upload.md +17 -0
  10. package/assets/content/partials/webhooks.md +13 -0
  11. package/assets/skill/SKILL.md +52 -0
  12. package/assets/skill/references/authentication.md +27 -0
  13. package/assets/skill/references/playback.md +29 -0
  14. package/assets/skill/references/processing.md +23 -0
  15. package/assets/skill/references/security.md +30 -0
  16. package/assets/skill/references/upload-flow.md +29 -0
  17. package/assets/skill/references/webhooks.md +19 -0
  18. package/assets/skill/scripts/known-endpoints.json +28 -0
  19. package/assets/skill/scripts/validate.mjs +287 -0
  20. package/assets/skill/templates/cloudflare-worker.md +39 -0
  21. package/assets/skill/templates/nextjs.md +47 -0
  22. package/assets/skill/templates/node-server.md +44 -0
  23. package/assets/skill/templates/vue-nuxt.md +49 -0
  24. package/assets/snapshots/llms-full.txt +347 -0
  25. package/assets/snapshots/openapi.json +1416 -0
  26. package/assets/snapshots/sources.json +19 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +101 -0
  29. package/dist/commands/init.d.ts +8 -0
  30. package/dist/commands/init.js +35 -0
  31. package/dist/commands/list.d.ts +1 -0
  32. package/dist/commands/list.js +28 -0
  33. package/dist/commands/uninstall.d.ts +6 -0
  34. package/dist/commands/uninstall.js +20 -0
  35. package/dist/commands/validate.d.ts +5 -0
  36. package/dist/commands/validate.js +18 -0
  37. package/dist/core/formats.d.ts +23 -0
  38. package/dist/core/formats.js +43 -0
  39. package/dist/core/fsutil.d.ts +5 -0
  40. package/dist/core/fsutil.js +34 -0
  41. package/dist/core/install.d.ts +16 -0
  42. package/dist/core/install.js +76 -0
  43. package/dist/core/markers.d.ts +5 -0
  44. package/dist/core/markers.js +13 -0
  45. package/dist/core/merge.d.ts +21 -0
  46. package/dist/core/merge.js +38 -0
  47. package/dist/core/prompt.d.ts +2 -0
  48. package/dist/core/prompt.js +23 -0
  49. package/dist/core/render.d.ts +5 -0
  50. package/dist/core/render.js +21 -0
  51. package/dist/core/report.d.ts +10 -0
  52. package/dist/core/report.js +35 -0
  53. package/dist/core/skill.d.ts +13 -0
  54. package/dist/core/skill.js +117 -0
  55. package/dist/paths.d.ts +5 -0
  56. package/dist/paths.js +10 -0
  57. package/dist/version.d.ts +1 -0
  58. package/dist/version.js +12 -0
  59. package/package.json +61 -0
@@ -0,0 +1,347 @@
1
+ # AudioDN — Full LLM-readable site dump
2
+
3
+ > AudioDN (Audio Delivery Network) is audio delivery infrastructure for developers and creators. One API and a drop-in web component handle upload, transcoding, signed delivery, and playback. Built on Cloudflare's global edge network.
4
+
5
+ This file is a deeper companion to /llms.txt, intended for AI agents that want a single document containing the product surface, integration paths, full API endpoint inventory, pricing, and trust posture.
6
+
7
+ ---
8
+
9
+ ## 1. Product overview
10
+
11
+ AudioDN provides infrastructure for audio delivery:
12
+
13
+ - Audio file uploading and processing (resumable, direct-to-storage signed URLs)
14
+ - Automatic variant generation: high-quality MP3, low-bandwidth MP3, preview clip, waveform image/video, analysis JSON
15
+ - Secure streaming with session-based access control (scoped, time-gated URLs)
16
+ - Embeddable Player and Uploader web components
17
+ - Multi-tenant support via Organizations, Collections, Tracks, and Creators
18
+
19
+ ## 2. Audiences
20
+
21
+ AudioDN is developer-primary with a dashboard-led path for creators.
22
+
23
+ - **Developers** — REST API, OpenAPI 3.1 spec, drop-in web components, scoped client-side keys.
24
+ - **Platforms** (SaaS, marketplaces, media platforms) — server-provisioned upload and play sessions, webhooks, multi-tenant collections.
25
+ - **Creators** (no-code) — dashboard-led upload, embed snippets, time-limited share links. See https://audiodeliverynetwork.com/for-creators.
26
+
27
+ ## 3. Integration approaches
28
+
29
+ AudioDN supports three integration patterns that can be mixed and matched:
30
+
31
+ ### Client-side
32
+ Use ADN web components (Player & Uploader) with Client-Side API Keys. The components handle all API calls behind the scenes — no backend required. Best for static sites, prototypes, and projects without a backend.
33
+
34
+ ### Server-side
35
+ Use ADN's API directly from your server to store tracks and fetch them for playback. Build fully custom upload and player experiences without ADN components. Required for mobile apps, custom players, and platforms needing fine-grained access control.
36
+
37
+ ### Hybrid
38
+ Use ADN's API server-to-server to provision upload and play sessions, then pass those session IDs to ADN's web components on the frontend. Your backend controls who can upload and play; the components handle the UI. Best for SaaS products, paywalled content, and subscription services.
39
+
40
+ Detailed guides:
41
+ - https://audiodeliverynetwork.com/docs/integration/web
42
+ - https://audiodeliverynetwork.com/docs/integration/mobile
43
+ - https://audiodeliverynetwork.com/docs/integration/server-side
44
+ - https://audiodeliverynetwork.com/docs/integration/hybrid
45
+
46
+ ## 4. Key concepts
47
+
48
+ - **Organization** — a client account on AudioDN. Configures default branding, webhooks, billing.
49
+ - **Collection** — a logical container for tracks (folder, album, podcast feed, course module).
50
+ - **Track** — an individual audio file with metadata, status (`processing` → `ready`), and track files.
51
+ - **Variant** — a reusable recipe defining an output to generate from every upload (e.g. HQ streaming, LQ streaming, preview clip, waveform). A track-specific variant can also be added after the fact.
52
+ - **Track file** — the actual output of applying a variant to a track: the stored, deliverable file (audio, preview, waveform). Produced on upload, or added after the fact.
53
+ - **Upload Session** — short-lived token for uploading one or more tracks to a collection.
54
+ - **Play Session** — short-lived token granting access to specific tracks and variants. Configurable TTL, scopable to a single end-user identifier.
55
+ - **Signed URL** — time-gated playback URL minted by a play session.
56
+ - **Client-Side API Key** — scoped key for embedding in web/mobile (Player role: read playback; Uploader role: write to one collection).
57
+ - **Inline Share Key** — public no-auth URL key that redirects to a single track variant. Key is in the URL path; each request mints a fresh signed CDN URL. See https://audiodeliverynetwork.com/docs/api/share.
58
+ - **API Access Key** — full-access key for server-to-server calls. Server-only.
59
+ - **Creator** — a sub-account under a client (artist, podcaster, contributor) used for usage tracking, access control, and analytics.
60
+
61
+ ## 5. URLs
62
+
63
+ - Marketing site: https://audiodeliverynetwork.com
64
+ - Documentation: https://audiodeliverynetwork.com/docs
65
+ - API base URL: https://api.audiodelivery.net (all endpoints prefixed with /v1)
66
+ - OpenAPI 3.1 spec: https://audiodeliverynetwork.com/openapi.json
67
+ - Markdown docs tree: https://audiodeliverynetwork.com/docs/llms-tree.md (every docs page is also available as clean Markdown at its `.md` twin)
68
+ - AI-agent integration guide: https://audiodeliverynetwork.com/for-ai-agents
69
+ - Account dashboard: https://account.audiodeliverynetwork.com
70
+ - Status: https://status.audiodeliverynetwork.com
71
+ - Components (npm): @audiodn/components — https://www.npmjs.com/package/@audiodn/components
72
+
73
+ ## 6. Authentication
74
+
75
+ Most API endpoints require a bearer token in the `Authorization` header:
76
+
77
+ ```
78
+ Authorization: Bearer YOUR_API_KEY
79
+ ```
80
+
81
+ Security boundary — a few upload and playback endpoints are authorized by a session ID in the URL (a capability token) instead of a bearer token, so they are safe to call from an untrusted client and must **not** be sent an API key:
82
+
83
+ - `GET /v1/upload_session/{upload_session_id}`
84
+ - `POST /v1/upload/{upload_session_id}/track`
85
+ - `GET /v1/play/{play_session_id}/{play_track_id}`
86
+ - `GET /v1/play/{play_session_id}/{play_track_id}/{variant_index}/download`
87
+
88
+ Key roles:
89
+
90
+ - **Server-side API key** — full access. Mint and store on the server only.
91
+ - **Client-side keys** — scoped to a single collection or track. Roles: Player (read-only playback) and Uploader (write to one collection). Safe to embed in browsers and mobile apps.
92
+
93
+ Mint, scope, and rotate keys at https://account.audiodeliverynetwork.com (Settings → API Keys).
94
+
95
+ ## 7. API endpoint inventory
96
+
97
+ All endpoints are prefixed with `/v1/`. Complete schemas at https://audiodeliverynetwork.com/openapi.json.
98
+
99
+ ### Organizations
100
+ - `GET /v1/organization/{organization_id}` — get organization
101
+ - `PUT /v1/organization/{organization_id}` — update organization
102
+
103
+ ### Creators
104
+ - `GET /v1/creator` — list creators (limit, offset)
105
+ - `GET /v1/creator/{creator_id}` — get creator
106
+ - `POST /v1/creator` — create creator (organization_index required; provisions and links a storage folder)
107
+ - `PUT /v1/creator/{creator_id}` — update creator
108
+ - `DELETE /v1/creator/{creator_id}` — delete creator
109
+
110
+ ### Collections
111
+ - `GET /v1/collection` — list collections (limit, offset)
112
+ - `GET /v1/collection/{collection_id}` — get collection
113
+ - `POST /v1/collection` — create collection (title required)
114
+ - `PUT /v1/collection/{collection_id}` — update collection
115
+ - `DELETE /v1/collection/{collection_id}` — delete collection
116
+ - `GET /v1/collection/{collection_id}/track` — list tracks in collection
117
+
118
+ ### Tracks
119
+ - `GET /v1/track/{track_id}` — get track
120
+ - `POST /v1/track` — create track (collection_id, file_name required)
121
+ - `PUT /v1/track/{track_id}` — update track
122
+ - `DELETE /v1/track/{track_id}` — delete track
123
+
124
+ ### Cover images
125
+ - `POST /v1/collection/{collection_id}/cover` — generate collection cover upload URL
126
+ - `POST /v1/track/{track_id}/cover` — generate track cover upload URL
127
+
128
+ ### Upload sessions
129
+ - `POST /v1/upload_session` — create upload session (requires Bearer auth; `collection_id` required unless the API key is scoped to a collection). Returns `upload_session_id` only — not an upload URL.
130
+ - `GET /v1/upload_session/{upload_session_id}` — get upload session (no Bearer required; the session ID authorizes the request)
131
+ - `POST /v1/upload/{upload_session_id}/track` — create a track within an upload session (one request per file; no Bearer required — the session ID authorizes it). Returns `track_id` and a per-track signed URL in `track_upload.upload_url`.
132
+
133
+ ### Play sessions
134
+ - `POST /v1/play_session/{scope}` — create play session; scope is `collection` or `track` (`playlist` is reserved but not yet supported — the API currently returns 400)
135
+ - `GET /v1/play_session/{play_session_id}` — get play session
136
+ - `GET /v1/play/{play_session_id}/{play_track_id}` — get a specific track in a play session, including signed variant URLs (no Bearer required; the session ID authorizes it)
137
+ - `GET /v1/play/{play_session_id}/{play_track_id}/{variant_index}/download` — redirect to a signed download URL for one variant (no Bearer required; only when the play session is downloadable)
138
+
139
+ ### Variants
140
+ - `GET /v1/variant` — list variants (limit, offset)
141
+ - `GET /v1/variant/{variant_id}` — get variant
142
+ - `POST /v1/track/{track_id}/variant` — add a track-specific variant to an already-processed track and queue processing. Types: `transcode`, `preview`. Codec settings optional (default `aac`/128 kbps); lossy codecs only (`aac`, `mp3`, `ogg`, `opus`). Requires a unique `index`. Bumps the track to `processing`, then back to `ready`.
143
+
144
+ ### Track upload lifecycle
145
+
146
+ When a file is uploaded to AudioDN, it moves through these stages:
147
+
148
+ 1. **Create upload session** — your app requests an upload session via the API (or the uploader component does it automatically with a Client-Side API key). The API returns an `upload_session_id`. A session can hold many tracks and does not itself return an upload URL.
149
+ 2. **Create a track in the session** — for each file, make a separate `POST /v1/upload/{upload_session_id}/track` request. The response includes `track_id` and a per-track signed URL in `track_upload.upload_url`. The session ID authorizes this request, so no API key is required.
150
+ 3. **Upload file** — the audio file is uploaded directly to storage with a `PUT` to `track_upload.upload_url`. Once the upload completes, processing begins automatically.
151
+ 4. **Initialization** — ADN probes the file to extract duration, codec info, and stream metadata. A default 320-sample waveform is generated for the player.
152
+ 5. **Variant processing** — each configured variant (transcodes, previews, analysis, waveform images/videos) is processed in parallel. Track status is `processing`.
153
+ 6. **Fallback processing** — if a file is too large or hits resource limits, the job is automatically retried on a higher-capacity processor. Status becomes `fallback_processing`. No action needed from your side.
154
+ 7. **Cover image and color extraction** — if the audio file contains embedded cover art, ADN extracts it, uploads it to the image CDN, and scans for a color palette. The most vibrant color is auto-selected as the `player_color` for theming. Responses and webhook payloads also include two derived, read-only companions: `player_color_light` and `player_color_dark`, contrast-adjusted variants of `player_color` for drawing on light and dark backgrounds respectively.
155
+ 8. **Track ready** — once all variants finish, status is set to `ready` (or `incomplete` if some variants failed but at least one playable variant succeeded). Wait for this state (poll `GET /v1/track/{track_id}` or use a webhook) before minting a play session or signing delivery URLs.
156
+ 9. **Webhook notification** — if a webhook URL is configured on the organization, ADN sends a `POST` on **notable outcomes only** (terminal status `ready`/`incomplete`/`error`/`init_error`, or when `track.files_completed_at` is stamped once every variant is done — transitional statuses are not delivered) with the track ID, status, previous status, file details, and metadata. For per-file progress use the Track File webhook. See the Webhooks section below.
157
+
158
+ ### Webhooks
159
+
160
+ The Track Processing webhook fires only on events of note — a terminal status, or when `track.files_completed_at` is set once all variants (including optional/after-the-fact) have been attempted. Transitional statuses (`processing`, `fallback`, `fallback_processing`) and the initial `initialized` state are not delivered; use the Track File webhook for per-file progress. It is configured in the dashboard Settings → Webhook panel (not via the API), and stored as `organization.webhook_url`.
161
+
162
+ - **Transport**: HTTP `POST`, `Content-Type: application/json`, header `X-ADN-Event: track.status_changed`.
163
+ - **Delivery**: fire-and-forget / at-least-once; ordering not guaranteed; currently unsigned. Make handlers idempotent and key on `track_id` + `status`. A track with optional variants may deliver twice: an early `ready`, then a files-complete event.
164
+ - **Statuses delivered**: terminal only — `ready`, `incomplete`, `error`, `init_error` (plus a delivery when `files_completed_at` changes). Transitional statuses (`initialized`, `processing`, `fallback`, `fallback_processing`) are not delivered.
165
+ - **Payload shape**:
166
+
167
+ ```json
168
+ {
169
+ "event": "track.status_changed",
170
+ "status": "ready | incomplete | error | init_error",
171
+ "previous_status": "string | null",
172
+ "organization_id": "uuid",
173
+ "creator_id": "uuid | null",
174
+ "collection_id": "uuid",
175
+ "track_id": "uuid",
176
+ "upload_session_id": "uuid | null",
177
+ "track": { "id": "uuid", "track_status_id": "string", "index": "string", "organization_index": "string | null", "file_name": "string | null", "file_name_original": "string | null", "player_title": "string | null", "player_subtitle": "string | null", "player_color": "string | null", "player_color_light": "string | null", "player_color_dark": "string | null", "order": "number", "format": "object | null", "metadata": "object | null", "duration": "number | null", "size": "number | null", "files_completed_at": "string | null" },
178
+ "files": [ { "id": "uuid", "path": "string", "url": "string | null", "size": "number | null", "content_type": "string | null", "file_name": "string", "is_public": "boolean", "is_success": "boolean", "status_text": "string | null", "variant": { "id": "uuid", "index": "string", "variant_type": { "id": "string", "viewer_id": "string", "title": "string" } } } ]
179
+ }
180
+ ```
181
+
182
+ `track.files_completed_at` is `null` on an early `ready` (optional variants still running) and a timestamp once the full set is done. A failed variant appears in `files` with `is_success: false`, `url: null`, and the reason in `status_text`. Full reference: https://audiodeliverynetwork.com/docs/webhooks/track-processing.
183
+
184
+ The Track File webhook fires once per track file (rather than once per track), so integrations do not have to unpack the full `files[]` array. It is configured in the dashboard Settings → Webhook panel and stored as `organization.webhook_url_file`. Every track file — success or failure — is recorded as a `file` row, so a single Database Webhook on `public.file` INSERT drives both events (no separate `process` webhook).
185
+
186
+ - **Events / status**: `track_file.created` (`status: "success"`, an output was stored, `file.is_success = true`) and `track_file.failed` (`status: "failed"`, a variant failed — a `file` row is still sent with `file.is_success = false`, `file.url = null`, and the reason in `message`).
187
+ - **Transport**: HTTP `POST`, `Content-Type: application/json`, header `X-ADN-Event: <event>`.
188
+ - **Delivery**: fire-and-forget / at-least-once; ordering not guaranteed; currently unsigned. Make handlers idempotent and key on `file_id` (or `track_id` + `file.variant.index`). Branch on `status` or `file.is_success`.
189
+ - **Payload shape**:
190
+
191
+ ```json
192
+ {
193
+ "event": "track_file.created | track_file.failed",
194
+ "status": "success | failed",
195
+ "organization_id": "uuid",
196
+ "creator_id": "uuid | null",
197
+ "collection_id": "uuid",
198
+ "track_id": "uuid",
199
+ "file_id": "uuid",
200
+ "message": "string | null",
201
+ "file": { "id": "uuid", "path": "string", "url": "string | null", "size": "number | null", "content_type": "string | null", "file_name": "string", "is_public": "boolean", "is_success": "boolean", "status_text": "string | null", "data": "object | null", "props": "object | null", "variant": { "id": "uuid", "index": "string", "variant_type": { "id": "string", "viewer_id": "string", "title": "string" } } }
202
+ }
203
+ ```
204
+
205
+ Full reference: https://audiodeliverynetwork.com/docs/webhooks/track-files.
206
+
207
+ ### Error envelope
208
+
209
+ All endpoints may return:
210
+
211
+ ```json
212
+ {
213
+ "ok": false,
214
+ "message": "string",
215
+ "api_request_id": "uuid"
216
+ }
217
+ ```
218
+
219
+ Common HTTP status codes: 200 (success), 400 (bad request), 401 (unauthorized), 404 (not found), 500 (internal server error).
220
+
221
+ ## 8. Web components
222
+
223
+ Install from npm: `npm install @audiodn/components`. Import the component you need (e.g. `import '@audiodn/components/player'`), or load it from a CDN with `<script type="module" src="https://unpkg.com/@audiodn/components@latest/dist/player.js"></script>`.
224
+
225
+ Custom element tag names: `<audiodn-player>`, `<audiodn-uploader>`, `<audiodn-waveform>`. HTML attribute names use hyphens (e.g. `api-key`, `collection-id`, `play-session-id`) while the JSON API uses underscores (e.g. `collection_id`, `play_session_id`).
226
+
227
+ ### Player
228
+ ```html
229
+ <script type="module">
230
+ import '@audiodn/components/player'
231
+ </script>
232
+ <audiodn-player
233
+ api-key="YOUR_PLAYER_KEY"
234
+ scope="collection"
235
+ id="COLLECTION_ID"
236
+ variants="hq,lq"
237
+ size="large"
238
+ ></audiodn-player>
239
+ ```
240
+
241
+ ### Uploader
242
+ ```html
243
+ <script type="module">
244
+ import '@audiodn/components/uploader'
245
+ </script>
246
+ <audiodn-uploader
247
+ api-key="YOUR_UPLOADER_KEY"
248
+ collection-id="COLLECTION_ID"
249
+ ></audiodn-uploader>
250
+ ```
251
+
252
+ Component reference: https://audiodeliverynetwork.com/docs/components/player, https://audiodeliverynetwork.com/docs/components/uploader, https://audiodeliverynetwork.com/docs/components/waveform.
253
+
254
+ ## 9. Minimal setup
255
+
256
+ 1. Sign up at https://account.audiodeliverynetwork.com and mint a server-side API key.
257
+ 2. (Optional) Create a collection: `POST /v1/collection` with `{ "title": "..." }`.
258
+ 3. Mint an upload session: `POST /v1/upload_session` with `{ "collection_id": "..." }`. Response includes `upload_session_id`.
259
+ 4. Create a track within the session: `POST /v1/upload/{upload_session_id}/track` with `{ "file_name": "..." }` (no Bearer needed; the session ID authorizes it). Response includes `track_id` and `track_upload.upload_url`. Upload the audio bytes (PUT) to that signed URL. Repeat this step once per file.
260
+ 5. Wait for the track to finish processing: poll `GET /v1/track/{track_id}` until `track.track_status_id` is `ready`, or use the track-processing webhook.
261
+ 6. Mint a play session: `POST /v1/play_session/track` with `{ "track_id": "...", "variants": ["hq", "lq"] }`. Response includes signed playback URLs in `first_track.variants[].url`.
262
+
263
+ ## 10. Pricing
264
+
265
+ All plans include free processing, unlimited plays, and zero egress fees. Plans differ by storage, max track length, and max file size.
266
+
267
+ | Plan | Launch sale | Standard | Storage | Max track | Max file |
268
+ |---|---|---|---|---|---|
269
+ | Creator | $4.99/mo | $9.99/mo | 10 GB | 30 min | 200 MB |
270
+ | Business | $14.99/mo | $19.99/mo | 50 GB (overage $1 / 5 GB) | 60 min | 500 MB |
271
+ | Platform & Enterprise | — | $499/mo | 1 TB ($499/TB overage) | 120 min | 1 GB+ |
272
+
273
+ Creator and Business plans include a 30-day free trial.
274
+
275
+ Full pricing page: https://audiodeliverynetwork.com/pricing
276
+
277
+ ## 11. Trust and security
278
+
279
+ - **Encryption**: TLS 1.2+ in transit. AES-256 at rest.
280
+ - **Signed URLs**: time-gated, scoped to a track or collection, configurable TTL.
281
+ - **Key scoping**: client-side keys are limited to a single resource and a single role (Player or Uploader).
282
+ - **Server-side keys**: never appear in browsers; can be rotated without invalidating in-flight sessions.
283
+ - **Sub-processors**: Cloudflare (R2, Workers, edge cache), Stripe (billing).
284
+ - **AI training**: we do not train models on your audio.
285
+ - **Compliance posture**: SOC 2 in progress. GDPR DPA available on request.
286
+ - **Responsible disclosure**: security@audiodeliverynetwork.com
287
+
288
+ ## 12. Documentation map
289
+
290
+ Every page below is also available as clean Markdown by appending `.md` to its URL
291
+ (e.g. https://audiodeliverynetwork.com/docs/api/tracks.md).
292
+
293
+ - https://audiodeliverynetwork.com/docs — Overview, integration paths, glossary
294
+ - https://audiodeliverynetwork.com/docs/variant-types — Available variant types
295
+ - https://audiodeliverynetwork.com/docs/api — API reference overview
296
+ - https://audiodeliverynetwork.com/docs/api/organizations — Organization endpoints
297
+ - https://audiodeliverynetwork.com/docs/api/creators — Creator endpoints
298
+ - https://audiodeliverynetwork.com/docs/api/collections — Collection endpoints
299
+ - https://audiodeliverynetwork.com/docs/api/tracks — Track endpoints
300
+ - https://audiodeliverynetwork.com/docs/api/covers — Cover image endpoints
301
+ - https://audiodeliverynetwork.com/docs/api/upload-sessions — Upload session endpoints
302
+ - https://audiodeliverynetwork.com/docs/api/play-sessions — Play session endpoints
303
+ - https://audiodeliverynetwork.com/docs/api/signing-keys — URL Signing keys (HMAC delivery URLs)
304
+ - https://audiodeliverynetwork.com/docs/api/share — Inline Share keys
305
+ - https://audiodeliverynetwork.com/docs/api/variants — Variant endpoints
306
+ - https://audiodeliverynetwork.com/docs/webhooks/track-processing — Track Processing webhook (fires on terminal status / files_completed_at only)
307
+ - https://audiodeliverynetwork.com/docs/webhooks/track-files — Track File webhook (fires once per track file; status success/failed, both delivered as file rows)
308
+ - https://audiodeliverynetwork.com/docs/webhooks/collection-sync — Collection Sync webhook (collection create/update/delete events)
309
+ - https://audiodeliverynetwork.com/docs/integration/web — Drop-in component setup
310
+ - https://audiodeliverynetwork.com/docs/integration/mobile — iOS, Android, Flutter
311
+ - https://audiodeliverynetwork.com/docs/integration/server-side — Full API control
312
+ - https://audiodeliverynetwork.com/docs/integration/hybrid — Server-provisioned sessions with components
313
+ - https://audiodeliverynetwork.com/docs/integration/signed-delivery — Sign URLs yourself, skip play sessions for public tracks
314
+ - https://audiodeliverynetwork.com/docs/components/player — Player web component
315
+ - https://audiodeliverynetwork.com/docs/components/uploader — Uploader web component
316
+ - https://audiodeliverynetwork.com/docs/components/waveform — Waveform web component
317
+ - https://audiodeliverynetwork.com/docs/recipes — Recipes + runnable examples index
318
+ - https://audiodeliverynetwork.com/docs/recipes/private-podcast — Entitlement-gated private podcast
319
+ - https://audiodeliverynetwork.com/docs/recipes/preview-and-waveform — Preview clips + waveform workflow
320
+ - https://audiodeliverynetwork.com/docs/recipes/vue-secure-upload — Secure upload in Vue / Nuxt
321
+ - https://audiodeliverynetwork.com/docs/roadmap — Feature roadmap
322
+
323
+ ## 13. Recipes and runnable examples
324
+
325
+ Task-oriented recipes live under https://audiodeliverynetwork.com/docs/recipes. Each recipe
326
+ covers when to use it, architecture, the server/client boundary, environment variables,
327
+ complete code, correct auth (Bearer only server-side; per-track create and play GET use NO
328
+ Bearer), the full upload lifecycle (create session -> per-track create -> PUT bytes -> wait
329
+ for `ready` -> playback/delivery), expected errors, testing, deployment, and links to the
330
+ exact OpenAPI operations (now carrying `operationId`s in https://audiodeliverynetwork.com/openapi.json).
331
+
332
+ Two runnable projects ship in the AudioDN repository, each with a README.md and an AGENTS.md:
333
+
334
+ - examples/nextjs-secure-upload — Next.js App Router. A server route mints the upload session
335
+ with a server-only API key; the browser creates the per-track URL (no key), PUTs bytes, polls
336
+ a server proxy until `ready`, then plays back with `<audiodn-player>`.
337
+ - examples/cloudflare-worker-signed-playback — a Cloudflare Worker that signs delivery URLs at
338
+ the edge with an HMAC URL Signing key kept in Worker secrets, returning a ready-to-play URL.
339
+ - examples/shared (@audiodn/recipe-kit) — dependency-free `fetch` + Web Crypto helpers
340
+ (`createUploadSession`, `createTrackInSession`, `putBytes`, `waitForReady`, `createPlaySession`,
341
+ `getPlayTrack`, `signDeliveryUrl`) reused by both examples and mirrored in the recipes.
342
+
343
+ ## 14. Contact
344
+
345
+ - Sales: sales@audiodeliverynetwork.com
346
+ - Support: support@audiodeliverynetwork.com
347
+ - Security: security@audiodeliverynetwork.com