Upload Video from Platform URL
curl --request POST \
--url https://api.memories.ai/serve/api/v1/scraper_url \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"video_urls": [
"https://www.tiktok.com/@cutshall73/video/7543017294226558221",
"https://www.tiktok.com/@abcnews/video/7543794552365124919"
],
"tiktok_post_urls": [
"<string>"
],
"callback_url": "https://your.app/callback",
"quality": "1080",
"folder_id": 671631448308117500
}
'import requests
url = "https://api.memories.ai/serve/api/v1/scraper_url"
payload = {
"video_urls": ["https://www.tiktok.com/@cutshall73/video/7543017294226558221", "https://www.tiktok.com/@abcnews/video/7543794552365124919"],
"tiktok_post_urls": ["<string>"],
"callback_url": "https://your.app/callback",
"quality": "1080",
"folder_id": 671631448308117500
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
video_urls: [
'https://www.tiktok.com/@cutshall73/video/7543017294226558221',
'https://www.tiktok.com/@abcnews/video/7543794552365124919'
],
tiktok_post_urls: ['<string>'],
callback_url: 'https://your.app/callback',
quality: '1080',
folder_id: 671631448308117500
})
};
fetch('https://api.memories.ai/serve/api/v1/scraper_url', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.memories.ai/serve/api/v1/scraper_url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'video_urls' => [
'https://www.tiktok.com/@cutshall73/video/7543017294226558221',
'https://www.tiktok.com/@abcnews/video/7543794552365124919'
],
'tiktok_post_urls' => [
'<string>'
],
'callback_url' => 'https://your.app/callback',
'quality' => '1080',
'folder_id' => 671631448308117500
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.memories.ai/serve/api/v1/scraper_url"
payload := strings.NewReader("{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.memories.ai/serve/api/v1/scraper_url")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.memories.ai/serve/api/v1/scraper_url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}"
response = http.request(request)
puts response.read_body{
"code": "0000",
"msg": "success",
"data": {
"taskId": "31b0fccb-d6f9-4135-922d-1e8828499812"
},
"success": true,
"failed": false
}Social Media — Post URLs
Import from Post URLs — Private
Import specific TikTok, YouTube, or Instagram post URLs into your Private Video Library.
POST
/
serve
/
api
/
v1
/
scraper_url
Upload Video from Platform URL
curl --request POST \
--url https://api.memories.ai/serve/api/v1/scraper_url \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"video_urls": [
"https://www.tiktok.com/@cutshall73/video/7543017294226558221",
"https://www.tiktok.com/@abcnews/video/7543794552365124919"
],
"tiktok_post_urls": [
"<string>"
],
"callback_url": "https://your.app/callback",
"quality": "1080",
"folder_id": 671631448308117500
}
'import requests
url = "https://api.memories.ai/serve/api/v1/scraper_url"
payload = {
"video_urls": ["https://www.tiktok.com/@cutshall73/video/7543017294226558221", "https://www.tiktok.com/@abcnews/video/7543794552365124919"],
"tiktok_post_urls": ["<string>"],
"callback_url": "https://your.app/callback",
"quality": "1080",
"folder_id": 671631448308117500
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
video_urls: [
'https://www.tiktok.com/@cutshall73/video/7543017294226558221',
'https://www.tiktok.com/@abcnews/video/7543794552365124919'
],
tiktok_post_urls: ['<string>'],
callback_url: 'https://your.app/callback',
quality: '1080',
folder_id: 671631448308117500
})
};
fetch('https://api.memories.ai/serve/api/v1/scraper_url', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.memories.ai/serve/api/v1/scraper_url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'video_urls' => [
'https://www.tiktok.com/@cutshall73/video/7543017294226558221',
'https://www.tiktok.com/@abcnews/video/7543794552365124919'
],
'tiktok_post_urls' => [
'<string>'
],
'callback_url' => 'https://your.app/callback',
'quality' => '1080',
'folder_id' => 671631448308117500
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.memories.ai/serve/api/v1/scraper_url"
payload := strings.NewReader("{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.memories.ai/serve/api/v1/scraper_url")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.memories.ai/serve/api/v1/scraper_url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"video_urls\": [\n \"https://www.tiktok.com/@cutshall73/video/7543017294226558221\",\n \"https://www.tiktok.com/@abcnews/video/7543794552365124919\"\n ],\n \"tiktok_post_urls\": [\n \"<string>\"\n ],\n \"callback_url\": \"https://your.app/callback\",\n \"quality\": \"1080\",\n \"folder_id\": 671631448308117500\n}"
response = http.request(request)
puts response.read_body{
"code": "0000",
"msg": "success",
"data": {
"taskId": "31b0fccb-d6f9-4135-922d-1e8828499812"
},
"success": true,
"failed": false
}Product: Visual Search
Use case: Upload videos and images, auto-index them, then search by natural language, image, or transcript phrase
Host:
https://api.memories.ai/serve/api/v1
Auth: Authorization: sk-mavi-... (no Bearer prefix)TikTok: https://www.tiktok.com/@cutshall73/video/7543017294226558221
Instagram: https://www.instagram.com/p/DNu8_Fs4mSd/
YouTube: https://www.youtube.com/shorts/T2ThsydNQaM
Prerequisites
- You have created a memories.ai API key.
Request Example
import requests
headers = {"Authorization": "sk-mavi-..."}
payload = {
"video_urls": [
"https://www.tiktok.com/@cutshall73/video/7543017294226558221",
"https://www.tiktok.com/@abcnews/video/7543794552365124919"
],
"folder_id": 671631448308117504,
"callback_url": "https://your.app/callback",
"quality": "1080"
}
response = requests.post(
"https://api.memories.ai/serve/api/v1/scraper_url",
json=payload,
headers=headers
)
print(response.json())
Parameters
List of post URLs to import. Combined with
tiktok_post_urls (if provided), the total must not exceed 50 URLs. All URLs must be from the same platform.Additional TikTok post URLs. Merged server-side with
video_urls before processing. Counts toward the 50-URL cap.Optional. Target folder for the uploaded video(s). Omit (or pass
-1) to store in your account’s Default folder (created automatically on first use). Pass a folder id from List Folders or Create Folder to store in that folder — it must belong to your account, otherwise the request is rejected.URL to receive POST notifications on task progress and per-video indexing completion. The server also accepts the alias
callback — pick one and stick with it per project.Target resolution. One of
"360", "480", "720", "1080", "1440", "2160". For YouTube, the actual resolution will be ≤ the requested value based on source availability. For TikTok and Instagram, videos are scraped at their original resolution.Response Example
{
"code": "0000",
"msg": "success",
"data": {
"taskId": "31b0fccb-d6f9-4135-922d-1e8828499812"
},
"success": true,
"failed": false
}
Response Fields
Unique identifier for the import task. Use with Get Task Status to check progress, or match against callback notifications.
Next Steps
Poll Get Task Status with the returnedtaskId until each derived video’s status reaches PARSE. Empty data.videos covers both “still downloading” and “task_id not found” — combine with a client-side timeout. FAIL is common for DRM-protected YouTube content.
Notes & Limits
- Rate limiting: See Rate limits.
- Billing: Each request deducts credits. YouTube URLs consume additional credits.
- Same-origin constraint: All URLs in one request must be from the same platform — mixed-platform batches are rejected.
- YouTube: Indexing may be slower than TikTok or Instagram due to scraper capacity.
Body
application/json
Platform video URLs. Merged with tiktok_post_urls; combined list must be non-empty and <= 50. All URLs must be from the same platform.
Maximum array length:
50Example:
[ "https://www.tiktok.com/@cutshall73/video/7543017294226558221", "https://www.tiktok.com/@abcnews/video/7543794552365124919" ]
