API Documentation
Complete reference for the H‑ear.World APIs
Quick Start
1. Get your API key from the API Dashboard
2. Include the key via Ocp-Apim-Subscription-Key header, or use an OAuth 2.1 Bearer token
3. Base URL: https://api.h-ear.world/v1
Authentication
Two authentication methods are supported. Use either one:
Option 1: API Key (server-to-server)
Get your key from the API Dashboard and include it in the request header:
The X-NCM-Api-Key header is also accepted as an alias.
Option 2: OAuth 2.1 Bearer Token (browser / app)
Authenticate via Auth0 using OAuth 2.1 with PKCE and pass the access token:
Bearer tokens are validated by API Management via OpenID Connect. Tokens expire after ~1 hour.
Tiers & Rate Limits
| Starter (A$25/mo) | Enterprise (A$125/mo) | |
|---|---|---|
| ML Analysis Minutes | 7,500 | 45,000 |
| Daily API calls (burst) | 1,000 | 50,000 |
| Hourly limit | 100 | 2,000 |
| API keys | 1 | 5 |
| Max file size | 25 MB | 25 MB |
| Batch size | 50 files | 50 files |
Rate limit headers: X-RateLimit-Tier, X-RateLimit-Daily-Limit, X-RateLimit-Hourly-Limit
Endpoints
Classify an audio or video file. Upload via multipart/form-data. Supports MP3, WAV, FLAC, OGG, M4A, AAC, MP4, MOV, WEBM. Max 25MB, 10 min duration. Video files (MP4, MOV, WebM) are accepted — audio is extracted server-side.
Request Body
Response
Classify audio from a publicly accessible URL. Alternatively, pass a JSON body with a "url" field to POST /v1/classify. Same format/size limits apply.
Request Body
Response
Submit up to 50 audio URLs for async batch classification. Results delivered via webhook callback.
Request Body
Response
List audio classes by taxonomy. Supports ?taxonomy= (audioset-yamnet-521, audioset-panns-527, species), ?category= filter, and ?limit=&offset= pagination. No authentication required.
Response
List enterprise jobs with optional filters for status, date range, and batchId.
Response
Get specific enterprise job details and classification results.
Response
Retrieve noise event classifications for a completed job.
Response
Get a time-limited download URL for the Excel analysis report.
Response
Get a time-limited SAS URL for streaming the original audio. Supports HTTP Range requests for seeking. Append a Media Fragment (e.g. #t=1.92,5.76) for time-range playback.
Response
Get peaks.js-compatible waveform visualization data and a streaming audio URL. Supports ?zoom= parameter: 256 (high detail), 1024 (default), or 4096 (overview). Returns 202 if waveform is still generating.
Response
API usage statistics for the current billing period.
Response
Health check. No authentication required.
Response
Register a simple callback webhook for classify job completion notifications.
Request Body
Response
Remove a simple callback webhook registration.
Response
List all enterprise webhook registrations for your subscription.
Response
Create an enterprise webhook registration with event filtering, taxonomy filters, and tier-depth notification rules. The signing secret is returned once — save it immediately.
Request Body
Response
Get enterprise webhook details including filter configuration.
Response
Partially update an enterprise webhook registration. Only include fields you want to change. Pass null for taxonomyFilter, notificationTierDepth, or notificationTierValues to clear them.
Request Body
Response
Delete an enterprise webhook registration.
Response
Send a test ping event to verify webhook connectivity and signing.
Response
Retrieve the delivery audit trail for an enterprise webhook — status codes, timestamps, and response bodies.
Response
Webhooks
Provide a callbackUrl on /v1/classify or /v1/classify/batch to receive async results. The API returns 202 Accepted immediately with a requestId and pollUrl.
Webhook payloads are signed with HMAC-SHA256 via the X-NCM-Signature header when a callbackSecret is provided. HTTPS only, 30s timeout, 3 retries with exponential backoff.
OpenAPI Specification
Import the machine-readable spec into Postman, Insomnia, or use it for client code generation.
Error Responses
All errors return JSON with an error field:
| Status | Description |
|---|---|
| 400 | Bad request - check your request body |
| 401 | Unauthorized - invalid or missing API key / Bearer token |
| 403 | Forbidden - insufficient permissions |
| 404 | Not found - resource doesn't exist |
| 429 | Rate limited - too many requests |
| 500 | Server error - try again later |