OEmbed 4.0.0

dotnet add package OEmbed --version 4.0.0                
NuGet\Install-Package OEmbed -Version 4.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OEmbed" Version="4.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add OEmbed --version 4.0.0                
#r "nuget: OEmbed, 4.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install OEmbed as a Cake Addin
#addin nuget:?package=OEmbed&version=4.0.0

// Install OEmbed as a Cake Tool
#tool nuget:?package=OEmbed&version=4.0.0                


A simple oEmbed consumer library for .NET


via NuGet:

PM> Install-Package OEmbed

DI extensions for Microsoft.Extensions.DependencyInjection:

PM> Install-Package OEmbed.Extensions.Microsoft.DependencyInjection

DI configuration


// or

services.AddOEmbed(options =>
    options.EnableCache = true; // true by default

By default it's register all providers listed below:

  • CoubProvider
  • DeviantartProvider
  • FlickrProvider
  • GiphyProvider
  • GyazoProvider
  • ImgurProvider
  • KickstarterProvider
  • PinterestProvider
  • PixivProvider
  • RedditProvider
  • SoundcloudProvider
  • SpotifyProvider
  • TiktokProvider
  • TumblrProvider
  • TwitterProvider
  • VimeoProvider
  • YoutubeProvider

Additional providers can be added during configuration:

using HeyRed.OEmbed.Providers;

    .ClearProviders() // remove all default providers

// or with options
// NOTE: Some oembed providers defines additional parameters, so use "Parameters" option if you need them.
    .ClearProviders() // remove all default providers
    .AddProvider<TwitterProvider>(options =>
        options.Parameters = new Dictionary<string, string?>
            ["theme"] = "dark"
    .AddProvider<FacebookProvider>(options =>
        options.Parameters = new Dictionary<string, string?>
            ["access_token"] = "app_id|token"

Additional providers:

  • FacebookProvider
  • InstagramProvider
  • AfreecatvProvider
  • AnnieMusicProvider
  • AudioboomProvider
  • AudiomackProvider
  • CodepenProvider
  • YandexMusicProvider
  • DeezerProvider
  • DailymotionProvider
  • RutubeProvider


  • Inject IOEmbedConsumer throught constructor injection.
  • Call one of RequestAsync() overloads.

For example:

using HeyRed.OEmbed.Abstractions;
using HeyRed.OEmbed.Models;

// Returns null if provider not found or HttpRequestException was thrown.
Video? result = await _oEmbedConsumer.RequestAsync<Video>("https://vimeo.com/22439234");

The result object is are similar to described in the spec

Models: Base, Link, Photo, Rich, Video

Basic request:

// Deserialize response based on provider preferences
var item = await _oEmbedConsumer.RequestAsync(url);

if (item is not null)
    if (item is Video) 
        // work with video 
    else if (item is Photo) 
        // work with photo
    else { //do something }


Configure cache options:

services.AddOEmbed().Configure<CacheOptions>(options =>
    options.AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(30); // Default is 1 hour

By default cache is enabled and it's default implementation is just a wrapper around MemoryCache

You can write your own implementation of ICache and replace default cache during app configuration:


Additional providers

An easy way to write your own provider is inheritance of ProviderBase record:

public record ExampleProvider : ProviderBase
    // "ProviderOptions" is optional, you can safely remove argument from constructor
    public ExampleProvider(ProviderOptions? options = default)
        // The Provider registry is primarily using this to select right provider at first check.
        // NOTE: Add all the hosts that will be used in the schemes below.
        AddAllowedHosts(new[] { "example.com", "www.example.com" });
            // Simple regex without hostname, "^" and "$" asserts. 
            // If this Regex is match string url, then scheme used to build request.
            matcher: new RegexMatcher(@"/\S+"),
            // API endpoint for current scheme
            apiEndpoint: "http://example.com/oembed",
            // The response type provided by resource.
            resourceType: ResourceType.Rich);
    // (Optional) Primary API response format(default is JSON)
    public override ResponseFormat ResponseType => ResponseFormat.Xml;



Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on OEmbed:

Package Downloads

OEmbed extensions for ASP.NET Core.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.0 1,684 1/22/2024
3.0.0 26,837 6/7/2023
2.0.1 808 10/28/2022
2.0.0 14,712 5/18/2022
1.6.1 554 4/1/2022
1.6.0 514 3/24/2022
1.5.0 506 3/23/2022
1.4.0 631 3/23/2022
1.3.0 502 3/21/2022
1.2.0 521 3/19/2022
1.1.0 515 3/18/2022
1.0.1 538 3/17/2022
1.0.0 521 3/17/2022