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
array
required
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.array
Additional TikTok post URLs. Merged server-side with
video_urls before processing. Counts toward the 50-URL cap.integer
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.string
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.string
default:"720"
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
string
Business status code.
0000 indicates success.string
Human-readable status message.
string
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.
Authorizations
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"
]
Optional TikTok post URLs. Server merges these into video_urls before processing. Counts toward the 50-URL cap.
Callback URL for task-complete and per-video indexing-complete notifications.
Example:
"https://your.app/callback"
Target video resolution. Must be one of 360/480/720/1080/1440/2160 (string).
Available options:
360, 480, 720, 1080, 1440, 2160 Example:
"1080"
Optional target folder for the upload. Omit or pass -1 for the account's Default folder (auto-created on first use). A positive id must belong to your account.
Example:
671631448308117500
