---
title: Error Handling & Best Practices
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-management/content-delivery-reference
---

## Error Handling & Best Practices

### Error Handling


| Error | Meaning | Resolution |
|-------|---------|------------|
| HTTP 403 | Access denied by access control rules | Check KS, referrer, IP, geo restrictions |
| HTTP 404 | Entry not found or not READY | Verify entry exists and status=2 |
| Empty manifest | No matching flavors for the requested format | Check flavor tags, format compatibility |
| `ENTRY_DELETED_MODERATED` | Entry was deleted or rejected by moderator | Entry is no longer available |
| Redirect loop | playManifest can't resolve a delivery profile | Check delivery profile configuration |




### Best Practices


- **Use HLS (`applehttp`) as default format.** It has the broadest device support and efficient adaptive bitrate switching.  
- **Always use HTTPS protocol.** Partners with `enforce_encryption` will block non-HTTPS requests.  
- **Append KS for protected content.** Access-controlled entries require a valid KS in the URL. Use short-lived user KS (type=0) for player embed, not admin KS.  
- **Use `playSessionId` for analytics.** Include a unique session ID to track playback analytics accurately.  
- **Use `referrer` for domain restrictions.** Base64-encode the page URL and pass it as the `referrer` parameter.  
- **Cache playManifest URLs.** Manifest URLs are CDN-cached. For time-sensitive access control, use `expiry` and `kt` parameters.  
- **Use `flavorAsset.getUrl` for download links.** It handles storage selection, CDN routing, and tokenization automatically.  
- **Use Access Control profiles for restrictions.** The platform handles geo, IP, domain, and scheduling checks during playback — configure them in Kaltura and they're enforced on every request.  
- **Short-form parameter names** (`e`, `f`, `pt`, etc.) are supported for all playManifest parameters for shorter URLs.  
- **Videos under 10 seconds:** Akamai HDS format automatically falls back to progressive HTTP for very short videos.
