@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.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/assets/content/instructions.md +48 -0
- package/assets/content/partials/auth.md +17 -0
- package/assets/content/partials/compatibility.md +10 -0
- package/assets/content/partials/playback.md +14 -0
- package/assets/content/partials/processing.md +17 -0
- package/assets/content/partials/security.md +14 -0
- package/assets/content/partials/upload.md +17 -0
- package/assets/content/partials/webhooks.md +13 -0
- package/assets/skill/SKILL.md +52 -0
- package/assets/skill/references/authentication.md +27 -0
- package/assets/skill/references/playback.md +29 -0
- package/assets/skill/references/processing.md +23 -0
- package/assets/skill/references/security.md +30 -0
- package/assets/skill/references/upload-flow.md +29 -0
- package/assets/skill/references/webhooks.md +19 -0
- package/assets/skill/scripts/known-endpoints.json +28 -0
- package/assets/skill/scripts/validate.mjs +287 -0
- package/assets/skill/templates/cloudflare-worker.md +39 -0
- package/assets/skill/templates/nextjs.md +47 -0
- package/assets/skill/templates/node-server.md +44 -0
- package/assets/skill/templates/vue-nuxt.md +49 -0
- package/assets/snapshots/llms-full.txt +347 -0
- package/assets/snapshots/openapi.json +1416 -0
- package/assets/snapshots/sources.json +19 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +101 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.js +35 -0
- package/dist/commands/list.d.ts +1 -0
- package/dist/commands/list.js +28 -0
- package/dist/commands/uninstall.d.ts +6 -0
- package/dist/commands/uninstall.js +20 -0
- package/dist/commands/validate.d.ts +5 -0
- package/dist/commands/validate.js +18 -0
- package/dist/core/formats.d.ts +23 -0
- package/dist/core/formats.js +43 -0
- package/dist/core/fsutil.d.ts +5 -0
- package/dist/core/fsutil.js +34 -0
- package/dist/core/install.d.ts +16 -0
- package/dist/core/install.js +76 -0
- package/dist/core/markers.d.ts +5 -0
- package/dist/core/markers.js +13 -0
- package/dist/core/merge.d.ts +21 -0
- package/dist/core/merge.js +38 -0
- package/dist/core/prompt.d.ts +2 -0
- package/dist/core/prompt.js +23 -0
- package/dist/core/render.d.ts +5 -0
- package/dist/core/render.js +21 -0
- package/dist/core/report.d.ts +10 -0
- package/dist/core/report.js +35 -0
- package/dist/core/skill.d.ts +13 -0
- package/dist/core/skill.js +117 -0
- package/dist/paths.d.ts +5 -0
- package/dist/paths.js +10 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +12 -0
- 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
|