Migrating from Legacy API to API v2

This document maps all fields from the Dailymotion Legacy API to their equivalents in API v2, and provides a per-endpoint migration guide to help you update your integration without diving into the full reference.

Quick mapping navigation


Global migration notes

TopicLegacy APIAPI v2
Base URL

https://api.dailymotion.com

https://partner.api.dailymotion.com/rest

Unified endpoint:

https://api.dailymotion.com/v2

Request formatForm-encoded params (POST, field list as string)JSON body for mutations; query params for reads
Update methodPOST (full or partial, no distinction)PATCH (partial updates only — omit unchanged fields)
TimestampsUnix integer (seconds)ISO 8601 string (e.g. 2026-06-01T12:00:00Z)
Resource IDsidNamed field: video_id, profile_id, player_id, etc.
Owner referenceowner.id / owner.username / owner.urlprofile.profile_id / profile.name / profile.profile_url
Category taxonomychannelcategory
For-kids flagis_created_for_kidsis_for_kids
Geo-restrictiongeoblocking string (comma-separated)geo_restriction object with mode + countries


Authentication

Key changes:

  • ✅ Supported now: Private API keys with client_credentials grant type, for server-to-server integrations.
  • ❌ Removed: password grant type.
  • 🔜 Coming soon: Public API keys with authorization_code grant type, for user-delegated access.
  • Unique OAuth token endpoint.

API key type

Legacy APIAPI v2
Private API key✓ Supported✅ Required
Public API key✓ Supported❌ Not supported
📘

To create a Private API key

Log into Dailymotion Studio → Organization → API keys → Create API key → select Private API key.

Define which profile(s) the key applies to and set its permissions.

Store the client_secret securely, it is only shown once.


Grant types

Grant typeLegacy APIAPI v2
client_credentials✓ Supported✅ Required (with private API keys)
password✓ Supported❌ Not supported
authorization_code✓ Supported🔜 Coming soon (with public API keys)

Token endpoint

Legacy APIAPI v2
Token URLhttps://api.dailymotion.com/oauth/token

https://partner.api.dailymotion.com/oauth/v1/token
https://oauth2.dailymotion.com/v2/token

Migrating from password grant to client credentials

Before — Legacy (password grant):

curl -X POST "https://api.dailymotion.com/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password" \
  -d "client_id={your_api_key}" \
  -d "client_secret={your_api_secret}" \
  -d "username={dailymotion_username}" \
  -d "password={dailymotion_password}" \
  -d "scope=manage_videos"

After — API v2 (client credentials):

curl -X POST "https://oauth2.dailymotion.com/v2/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id={your_private_api_key}" \
  -d "client_secret={your_private_api_secret}" \
  -d "scope=video.manage"
⚠️

Scopes have also changed

manage_videos becomes video.manage. See the Scopes section for the full mapping.



Scopes

Refer to v2 authentication guide for full scope usage. Separate multiple scopes with spaces.

LEGACY SCOPESAPI v2 EQUIVALENTS
manage_playersplayer.manage
manage_playlistsplaylist.manage
manage_subtitlesvideo.manage
manage_videosvideo.manage
emailprofile.read
userinfoprofile.manage


Video

Key changes:

  • HTTP method to update a video changed from POST to PATCH. Only send fields that need to be updated.
  • Stream URLs & Download URLs can be requested via a dedicated object.
  • geoblocking replaced by a structured geo_restriction object.

Video endpoints

OperationLegacy API
https://partner.api.dailymotion.com/rest
or
https://api.dailymotion.com/
API v2
https://api.dailymotion.com/v2
Get upload URLGET /file/uploadPOST /files/upload_sessions
Upload video filePOST {upload_url} (Retrieved upload_url from above)POST {upload_url} (Same flow: Retrieved upload_url from above)
Create videoPOST /user/{PROFILE_ID}/videos with url=...POST /profiles/{profile_id}/videos with {"source": {"file_url": "..."}}
List videosGET /user/{id}/videosGET /profiles/{profile_id}/videos
Get single videoGET /video/{id}GET /videos/{id}
Update videoPOST /video/{id}PATCH /videos/{id}
Delete videoDELETE /video/{id}DELETE /videos/{id}
Generate time-limited stream URLsGET https://partner.api.dailymotion.com/rest/video/{id}?fields=stream_hls_url&client_ip={client_ip}POST /videos/{id}/streams
Learn more
Generate unrestricted stream URLsGET https://partner.api.dailymotion.com/rest/video/{id}?fields=stream_hls_url&no_expire=1&no_ip_lock=1Coming soon
Generate time-limited download URLsGET https://partner.api.dailymotion.com/rest/video/{id}?fields={stream_formats}
Then add download=1 to retrieve URL.
POST /videos/{id}/downloads
Learn more

Video fields

Identity & Core metadata

Legacy APIAPI v2Notes
idvideo_id ✓Renamed
titletitle ✓Unchanged
descriptiondescriptionUnchanged
urlvideo_urlRenamed
private_idComing soon
Use video_url in the meantime. Learn more about how to collect videos' private_id.
created_timecreated_at ✓Format Unix timestamp → ISO 8601
updated_timeupdated_atFormat Unix timestamp → ISO 8601
uploaded_timeuploaded_atFormat Unix timestamp → ISO 8601
publish_datepublished_atFormat Unix timestamp → ISO 8601
languagelanguageUnchanged
channelcategory

Renamed

The "channel" taxonomy is now called "category".

tagstagsUnchanged
hashtagshashtagsUnchanged
countrycountryUnchanged
conversation_openerengagement_messageRenamed

Publication & Visibility

Legacy APIAPI v2Notes
publishedis_publishedRenamed
Read-only in v2
private + publishedvisibilityComplex
Two booleans collapse into one enum: public / private / password. See mapping table below.

visibility mapping:

Legacy (private, published)v2 visibility
private=false, published=truepublic
private=true, published=falseprivate

Content classification

Legacy APIAPI v2Notes
is_created_for_kidsis_for_kidsRenamed
explicitis_explicitRenamed
Write-once, cannot be unset once true
stream_altered_with_aiis_ai_alteredRenamed
ai_subtitle_languagesai_subtitlesRenamed
ai_chapter_generation_requiredenable_ai_chapter_generationRenamed
Unsupportedcan_be_stitchedNew in v2

Embedding

Legacy APIAPI v2Notes
allow_embedembedding.enable_embed ✓Nested in embedding
embed_url-Dropped
embed_html-Dropped

Geoblocking

In the Legacy API, geoblocking settings were stored in a single geoblocking field as a comma-separated string: The first word was the restriction type, and the remaining values were country codes (ie. geoblocking=allow, fr, us, it).

In API v2, this single field is replaced by a structured geo_restriction object. It has two dedicated sub-fields that must always be set together: mode (the type of restriction) and countries (the list of country codes it applies to).

Legacy APIAPI v2Notes
geoblockinggeo_restriction.mode ✓

Complex

Nested in geo_restriction:
  • allow
  • block
geoblockinggeo_restriction.countries

Complex

Nested in geo_restriction. Combine with geo_restriction.mode, and add country codes.


Thumbnails

Legacy APIAPI v2Notes
thumbnail_1080_urlthumbnail.h1080_url ✓Nested in thumbnail. Default when ?fields=thumbnail
thumbnail_720_urlthumbnail.h720_urlNested in thumbnail
thumbnail_480_urlthumbnail.h480_urlNested in thumbnail
thumbnail_360_urlthumbnail.h360_urlNested in thumbnail
thumbnail_240_urlthumbnail.h240_urlNested in thumbnail
thumbnail_180_urlthumbnail.h180_urlNested in thumbnail
thumbnail_120_urlthumbnail.h120_urlNested in thumbnail
thumbnail_62_urlthumbnail.h62_urlNested in thumbnail
thumbnail_60_urlthumbnail.h60_urlNested in thumbnail

First frames

Legacy APIAPI v2Notes
first_frame_1080_urlfirst_frame.h1080_url ✓Nested in first_frame. Default when ?fields=first_frame
first_frame_720_urlfirst_frame.h720_urlNested in first_frame
first_frame_480_urlfirst_frame.h480_urlNested in first_frame
first_frame_360_urlfirst_frame.h360_urlNested in first_frame
first_frame_240_urlfirst_frame.h240_urlNested in first_frame
first_frame_180_urlfirst_frame.h180_urlNested in first_frame
first_frame_120_urlfirst_frame.h120_urlNested in first_frame
first_frame_60_urlfirst_frame.h60_urlNested in first_frame

Previews

Legacy APIAPI v2Notes
preview_480p_urlpreview.p480_url ✓Nested in preview. Default when ?fields=preview
preview_360p_urlpreview.p360_urlNested in preview
preview_240p_urlpreview.p240_urlNested in preview

Owner / Profile

Legacy APIAPI v2Notes
owner.idprofile.profile_id ✓Nested in profile
owner.usernameprofile.nameNested in profile
owner.urlprofile.profile_urlNested in profile

Media properties

Legacy APIAPI v2Notes
durationsource.durationNested in source
widthsource.widthNested in source
heightsource.heightNested in source
aspect_ratiosource.aspect_ratioNested in source
checksumsource.checksumNested in source
urlsource.file_url

New in v2

Nested in source. Write-only, used at upload / source replacement.

video_formatsavailable_formatsRenamed, consolidated with audio formats
audio_formatsavailable_formatsRenamed, merged into single available_formats object

Processing

Legacy APIAPI v2Notes
statusprocessing.encoding_statusNested in processing
encoding_progressprocessing.encoding_progressNested in processing
publishing_progressprocessing.publishing_progressNested in processing

Streaming

Legacy APIAPI v2Notes
streaming.hls_url, streaming.source_url, stream_h264_hd1080_url etc.POST /v2/videos/{id}/streams

New in v2

Moved to a dedicated endpoint

Time-limited stream URLs only

—POST /v2/videos/{id}/downloads

New in v2

Time-limited, pre-signed download URLs per format



Profile

Key change: The Legacy "user" concept splits into two in v2:

  • User: Associated profiles via GET /v2/me and GET /v2/users/{id}.
  • Profile: Profile identity and content management via /v2/profiles/{id}.

Profile endpoints

OperationLegacy API
https://partner.api.dailymotion.com/rest
or
https://api.dailymotion.com/
API v2
https://api.dailymotion.com/v2
Get a profileGET /users/{profile_id}GET /profiles/{profile_id}
Update a profilePOST /user/{profile_id}PATCH /profiles/{profile_id}

Profile fields

Identity & Core metadata

Legacy APIAPI v2Notes
idprofile_id ✓Renamed
usernamename ✓Renamed
screennamedisplay_nameRenamed
descriptiondescriptionUnchanged
countrycountryUnchanged
created_timecreated_atFormat
Unix timestamp → ISO 8601
updated_timeupdated_atFormat Unix timestamp → ISO 8601

Avatar

Legacy APIAPI v2
avatar_480_urlComing soon
avatar_720_urlComing soon
avatar_360_urlComing soon
avatar_160_urlComing soon
avatar_120_urlComing soon
avatar_80_urlComing soon
avatar_60_urlComing soon
avatar_25_urlComing soon

Cover

Legacy APIAPI v2
cover_1920x_urlDropped
cover_1024x_urlDropped
cover_375x_urlDropped
cover_375_urlDropped
cover_250_urlDropped
cover_210_urlDropped
cover_200_urlDropped
cover_150_urlDropped
cover_100_urlDropped

Watermark

Legacy APIAPI v2
watermark_urlComing soon
watermark_link_urlComing soon

Social links

Legacy APIAPI v2Notes
twitter_urlsocial_links.twitter_urlNested in social_links
instagram_urlsocial_links.instagram_urlNested in social_links
facebook_urlsocial_links.facebook_urlNested in social_links
website_urlsocial_links.website_url ✓Nested in social_links

Webhook

Legacy APIAPI v2
webhook_urlwebhook.callback_urlNested in webhook
webhook_eventswebhook.eventsNested in webhook


Player

Key change:

In v2, all Player settings have been reorganised into named sub-objects by concern (interface, playback, advertising, etc.) instead of a flat list of fields.

Player endpoints

OperationLegacy API
https://partner.api.dailymotion.com/rest
or
https://api.dailymotion.com/
API v2
https://api.dailymotion.com/v2/
List playersGET /user/{profile_id}/playersGET /profiles/{profile_id}/players
Get single playerGET /player/{player_id}GET /v2/players/{player_id}
Create playerPOST /user/{profile_id}/playersPOST /v2/profiles/{profile_id}/players
Update playerPOST /player/{player_id}PATCH /v2/players/{player_id}
Delete playerDELETE /player/{player_id}DELETE /v2/players/{player_id}

Player fields

Identity

Legacy APIAPI v2Notes
idplayer_id ✓Renamed
labelname ✓Renamed
created_timecreated_atFormat
Unix timestamp → ISO 8601
updated_timeupdated_atFormat
Unix timestamp → ISO 8601

Profile

Legacy APIAPI v2Notes
owner_idprofile.profile_id ✓Nested in profile
user_channel_organizationprofile.organization_idNested in profile

Endpoints

Legacy APIAPI v2Notes
embed_script_urlendpoints.embed_url ✓Nested in endpoints
embed_html_urlendpoints.iframe_urlNested in endpoints
lib_script_urlendpoints.lib_urlNested in endpoints

Advertising

Legacy APIAPI v2Notes
enable_adsadvertising.enable_ads ✓Nested in advertising
Not supportedadvertising.enable_eid_collectionNested in advertising
enable_ad_preloadadvertising.enable_preloadRenamed
Nested in advertising
enable_wait_for_custom_configadvertising.enable_wait_for_custom_configNested in advertising
has_ssaiadvertising.has_ssai
✓
<Glossary>Nested</Glossary> in advertising
ad_pressure_optimizationadvertising.pressure_mode

Renamed

Nested in advertising

wait_for_custom_config_delayadvertising.wait_for_custom_config_delayNested in advertising

Content

Legacy APIAPI v2Notes
enable_profile_linkcontent.enable_profile_linkNested in content
enable_video_titlecontent.enable_title ✓

Renamed

Nestedin content

enable_video_title_linkcontent.enable_title_linkRenamed
Nested in content

Contextual

Legacy APIAPI v2Notes
enable_contextual_contentcontextual.enable_contextual_content ✓Nested in contextual
enable_contextual_content_fallbackcontextual.enable_fallbackRenamed
Nested in contextual
enable_contextual_content_freshnesscontextual.enable_freshnessRenamed
Nested in contextual
contextual_content_freshnesscontextual.freshness_days

Renamed

Nested in contextual

contextual_content_sourcecontextual.sourceRenamed
Nested in contextual

Interface

Legacy APIAPI v2Notes
aspect_ratiointerface.aspect_ratioNested in interface
colorinterface.color ✓Nested in interface
enable_ads_controlsinterface.enable_ads_controlsNested in interface
enable_attention_peaksinterface.enable_attention_peaksNested in interface
enable_clic_to_unmute-Dropped
enable_playback_controlsinterface.enable_controlsRenamed
Nested in interface
enable_dm_logointerface.enable_dm_logoNested in display
enable_dynamic_thumbnailinterface.enable_dynamic_thumbnailNested in interface
enable_keyboard_shortcutsinterface.enable_keyboard_shortcutsNested in interface
enable_live_offair_screeninterface.enable_live_offair_screenNested in interface
enable_paid_partnership_labelinterface.enable_paid_partnership_labelNested in interface
enable_sharing-Dropped
enable_sharing_url_location-Dropped
enable_spinnerinterface.enable_spinnerNested in interface
enable_startscreen_dm_linkinterface.enable_startscreen_dm_linkNested in interface
enable_subtitlesinterface.enable_subtitlesNested in interface
enable_tap_to_unmute-Dropped
enable_titles_in_video_cardsinterface.enable_titles_in_video_cardsNested in interface
enable_watch_now_cardinterface.enable_watch_now_cardNested in interface

Picture-in-picture (PiP)

Legacy APIAPI v2Notes
enable_google_policy_uipip.enable_google_policy_uiNested in pip
enable_start_pip_expandedNot supported anymoreDropped
Use pip.enable_large_size instead.
Not supportedpip.enable_large_sizeNew in v2
Not supportedpip.enable_selected_placementNew in v2
pippip.modeRenamed
Nested in pip
pip_selected_placementpip.selected_placementNested in pip

Watermark

Legacy APIAPI v2Notes
watermark_image_typewatermark.image_type ✓Nested in watermark
watermark_link_typewatermark.link_typeNested in watermark
watermark_link_urlwatermark.link_urlNested in watermark

Playback

Legacy APIAPI v2Notes
autonext_afterplayback.autonext_durationRenamed Nested in playback
autoskip_afterplayback.autoskip_durationRenamed Nested in playback
autostartplayback.autostart_mode ✓Renamed Nested in playback
enable_autonextplayback.enable_autonextNested in playback
enable_autoskipplayback.enable_autoskipNested in playback
enable_content_preloadplayback.enable_content_preloadNested in playback
enable_eco_modeplayback.enable_eco_modeNested in playback
enable_receive_url_locationplayback.enable_receive_url_locationNested in playback
enable_hold_to_fastforwardplayback.enable_hold_to_fastforwardNested in playback
enable_muteplayback.enable_muteNested in playback
has_reached_playback_limitsplayback.has_reached_playback_limitsNested in playback

Recommendations

Legacy APIAPI v2Notes
enable_automatic_recommendationsrecommendations.enable_automatic ✓Renamed
Nested in recommendations
enable_custom_recommendationsrecommendations.enable_customRenamed
Nested in recommendations
has_recommendations_from_org_onlyrecommendations.has_from_org_onlyRenamed
Nested in recommendations
recommendations_optimisationrecommendations.optimization_mode

Renamed

Nested in recommendations



Playlist

Key change:

Thumbnail information isn't supported yet in v2.

Playlist endpoints

OperationLegacy API
https://partner.api.dailymotion.com/rest
or
https://api.dailymotion.com/
API v2
https://api.dailymotion.com/v2/
List playlistsGET /playlistsNot supported
List my playlists GET /user/{profile_id}/playlistsGET /profiles/{profile_id}/playlists
List a playlistGET /playlist/{playlist_id}GET /playlists/{playlist_id}
List videos in playlistGET /playlist/{playlist_id}/videosGET /playlists/{playlist_id}/videos
Create playlistPOST /user/{profile_id}/playlistsPOST /profiles/{profile_id}/playlists
Update playlistPOST /playlist/{playlist_id}PATCH /playlists/{playlist_id}
Add video to playlistPOST /playlist/{playlist_id}/videos/{video_id}POST /playlists/{playlist_id}/videos
Delete playlistDELETE /playlist/{playlist_id}DELETE /playlists/{playlist_id}
Remove video from playlistDELETE /playlist/{playlist_id}/videos/{video_id}DELETE /playlists/{playlist_id}/videos/{video_id}
Remove all videos from playlistDELETE /playlist/{playlist_id}/videosNot supported

Playlist fields

Identity & Core metadata

Legacy APIAPI v2Notes
idplaylist_id ✓Renamed
nametitleRenamed
descriptiondescriptionUnchanged
urlplaylist_urlRenamed
embed_urlembed_urlUnchanged
created_timecreated_at ✓Format
Unix timestamp → ISO 8601
updated_timeupdated_at ✓Format
Unix timestamp → ISO 8601

Visibility

Legacy APIAPI v2Notes
privatevisibility

Complex

Boolean collapses into enum: public / private.


Thumbnails

Legacy API FieldAPI v2 Field
thumbnail_urlDropped
thumbnail_720_urlDropped
thumbnail_480_urlDropped
thumbnail_360_urlDropped

Owner / Profile

Legacy API FieldAPI v2 FieldNotes
owner.idprofile.profile_id ✓Nested in profile


Livestream

Key change:

Livestreams are now a dedicated object in v2: No more mode=live param on the video endpoint.

Livestream endpoints

OperationLegacy API
https://partner.api.dailymotion.com/rest
or
https://api.dailymotion.com/
API v2
https://api.dailymotion.com/v2
Get single livestreamGET /video/{video_id}?mode=liveGET /livestreams/{livestream_id}
List profile's livestreamsGET /user/{profile_id}/videos?mode=liveGET /profiles/{profile_id}/livestreams
Create livestreamPOST /user/{profile_id}/videos?mode=livePOST /profiles/{profile_id}/livestreams
Update livestreamPOST /video/{video_id}PATCH /v2/livestreams/{livestream_id}
Delete livestreamDELETE /video/{video_id}DELETE /v2/livestreams/{livestream_id}

Livestream fields

Identity & Core metadata

Legacy APIAPI v2Notes
idlivestream_id ✓Renamed
titletitle ✓Unchanged
descriptiondescriptionUnchanged
created_timecreated_atFormat
Unix timestamp → ISO 8601
start_timestart_atFormat
Unix timestamp → ISO 8601
end_timeend_atFormat
Unix timestamp → ISO 8601
languagelanguageUnchanged
channelcategoryRenamed
tagstagsUnchanged
countrycountryUnchanged
is_created_for_kidsis_for_kidsRenamed

Visibility

Legacy APIAPI v2Notes
private + publishedvisibility

Complex

Same mapping logic as Video. See visibility table above.


Status

Legacy APIAPI v2Notes
onairstatus.onair ✓Nested in status
live_airing_timestatus.airing_atNested in status
live_audio_bitratestatus.audio_bitrateNested in status

Ingest

Legacy APIAPI v2Notes
live_publish_urlingest.rtmp_url ✓Nested in ingest. Add context=refresh=true to regenerate the key
live_publish_srt_urlingest.srt_urlNested in ingest. Add context=refresh=true to regenerate the key
live_ingestsingest.available_serversNested in ingest

Recording

Legacy APIAPI v2Notes
live_auto_recordrecording.enable_auto_record ✓Nested in recording
record_statusrecording.statusNested in recording
record_start_timerecording.start_atNested in recording
record_end_timerecording.end_atNested in recording

Advertising

Legacy APIAPI v2Note
live_ad_break_remaining
live_ad_break_end_time
live_ad_break_launch

Embedding & Geo-restriction

The geoblocking mapping is identical to the video object: The legacy geoblocking parameter splits into two fields that must always be set together. See Geo-restriction section in Video for the full explanation.

Legacy APIAPI v2Notes
allow_embedembedding.enable_embed ✓Nested in embedding
geoblockinggeo_restriction.mode ✓

Complex

Nested in geo_restriction — same parsing as Video

geoblockinggeo_restriction.countries

Complex

Nested in geo_restriction — extract country codes after first element


Thumbnails

Legacy APIAPI v2Notes
thumbnail_1080_urlthumbnail.h1080_url ✓Nested in thumbnail. Default when ?fields=thumbnail
thumbnail_720_urlthumbnail.h720_urlNested in thumbnail
thumbnail_480_urlthumbnail.h480_urlNested in thumbnail
thumbnail_240_urlthumbnail.h240_urlNested in thumbnail

Owner / Profile

Legacy API FieldAPI v2 FieldNotes
owner.idprofile.profile_id ✓Nested in profile



Did this page help you?