curl --request POST \
--url https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"platform": "youtube"
}
'import requests
url = "https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata"
payload = { "platform": "youtube" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'youtube'})
};
fetch('https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata', 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.aisa.one/apis/v1/social/posts/{postId}/update-metadata",
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([
'platform' => 'youtube'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.aisa.one/apis/v1/social/posts/{postId}/update-metadata"
payload := strings.NewReader("{\n \"platform\": \"youtube\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.aisa.one/apis/v1/social/posts/{postId}/update-metadata")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"platform\": \"youtube\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"platform\": \"youtube\"\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"success": true,
"updatedFields": [
"<string>"
],
"videoId": "<string>"
}{
"error": {
"code": "<string>",
"details": {},
"message": "<string>",
"param": "<string>",
"retryHint": "never",
"retryable": true,
"type": "<string>"
}
}Update post metadata
curl --request POST \
--url https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"platform": "youtube"
}
'import requests
url = "https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata"
payload = { "platform": "youtube" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'youtube'})
};
fetch('https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata', 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.aisa.one/apis/v1/social/posts/{postId}/update-metadata",
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([
'platform' => 'youtube'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.aisa.one/apis/v1/social/posts/{postId}/update-metadata"
payload := strings.NewReader("{\n \"platform\": \"youtube\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.aisa.one/apis/v1/social/posts/{postId}/update-metadata")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"platform\": \"youtube\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"platform\": \"youtube\"\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"success": true,
"updatedFields": [
"<string>"
],
"videoId": "<string>"
}{
"error": {
"code": "<string>",
"details": {},
"message": "<string>",
"param": "<string>",
"retryHint": "never",
"retryable": true,
"type": "<string>"
}
}Request contract
- Method and path: POST /apis/v1/social/posts/{postId}/update-metadata
- Availability: enabled
- Request URL template:
https://api.aisa.one/apis/v1/social/posts/{postId}/update-metadata - postId: path; required
- Runtime facts: 99acb5bddbedc8d3352e7c4fef86c3e6d8852c14772bcd18dbcf415237a642bd
{
"operationId": "post_aisa_social_apis_v1_social_posts_postid_upda_cf80eb",
"method": "POST",
"path": "/apis/v1/social/posts/{postId}/update-metadata",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [
{
"description": "AIsa post ID, or \"_\" when using direct video ID mode",
"in": "path",
"name": "postId",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"example": {
"description": "New SEO-optimized description",
"platform": "youtube",
"tags": [
"seo",
"marketing",
"tutorial"
],
"title": "Updated Video Title"
},
"schema": {
"properties": {
"accountId": {
"description": "One of your social accounts (acc_...).",
"pattern": "^acc_[0-9A-Za-z]{22}$",
"type": "string"
},
"categoryId": {
"description": "YouTube video category ID",
"type": "string"
},
"containsSyntheticMedia": {
"description": "AI-generated content disclosure. Set true if the video contains synthetic content that could be mistaken for real. YouTube may add a label.",
"type": "boolean"
},
"description": {
"description": "New video description",
"type": "string"
},
"madeForKids": {
"description": "COPPA compliance flag. Set true for child-directed content (restricts comments, notifications, ad targeting).",
"type": "boolean"
},
"platform": {
"description": "The platform to update metadata on",
"enum": [
"youtube"
],
"type": "string"
},
"playlistId": {
"description": "YouTube playlist ID to add the video to (e.g. 'PLxxxxxxxxxxxxx'). Use GET /apis/v1/social/accounts/{id}/youtube-playlists to list available playlists. Only playlists owned by the channel are supported.",
"type": "string"
},
"privacyStatus": {
"description": "Video privacy setting",
"enum": [
"public",
"private",
"unlisted"
],
"type": "string"
},
"tags": {
"description": "Array of keyword tags (max 500 characters combined for YouTube)",
"items": {
"maxLength": 100,
"type": "string"
},
"type": "array"
},
"thumbnailUrl": {
"description": "Public URL of a custom thumbnail image (JPEG, PNG, or GIF, max 50 MB, recommended 1280x720). Works on any video you own, including videos not published through AIsa. The channel must be verified (phone verification) to set custom thumbnails.\n\n**Errors:**\n\n- 400 with the reason, no field updated: YouTube refuses the thumbnail (e.g. channel without the custom-thumbnail permission, video not owned by the connected channel), or the image URL cannot be fetched or has an unsupported format or size.\n- 429: YouTube thumbnail rate limit (uploadRateLimitExceeded). Retry later, not immediately, because retries keep the channel over its limit.\n- 500: any other temporary YouTube or network failure; can be retried.",
"format": "uri",
"type": "string"
},
"title": {
"description": "New video title (max 100 characters for YouTube)",
"maxLength": 100,
"type": "string"
},
"videoId": {
"description": "YouTube video ID (required for direct mode, ignored for post-based mode)",
"type": "string"
}
},
"required": [
"platform"
],
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"description": "Included with your connected social accounts: AIsa does not charge per call.",
"kind": "no_customer_charge"
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
AIsa post ID, or "_" when using direct video ID mode
Body
The platform to update metadata on
youtube One of your social accounts (acc_...).
^acc_[0-9A-Za-z]{22}$YouTube video category ID
AI-generated content disclosure. Set true if the video contains synthetic content that could be mistaken for real. YouTube may add a label.
New video description
COPPA compliance flag. Set true for child-directed content (restricts comments, notifications, ad targeting).
YouTube playlist ID to add the video to (e.g. 'PLxxxxxxxxxxxxx'). Use GET /apis/v1/social/accounts/{id}/youtube-playlists to list available playlists. Only playlists owned by the channel are supported.
Video privacy setting
public, private, unlisted Array of keyword tags (max 500 characters combined for YouTube)
100Public URL of a custom thumbnail image (JPEG, PNG, or GIF, max 50 MB, recommended 1280x720). Works on any video you own, including videos not published through AIsa. The channel must be verified (phone verification) to set custom thumbnails.
Errors:
- 400 with the reason, no field updated: YouTube refuses the thumbnail (e.g. channel without the custom-thumbnail permission, video not owned by the connected channel), or the image URL cannot be fetched or has an unsupported format or size.
- 429: YouTube thumbnail rate limit (uploadRateLimitExceeded). Retry later, not immediately, because retries keep the channel over its limit.
- 500: any other temporary YouTube or network failure; can be retried.
New video title (max 100 characters for YouTube)
100YouTube video ID (required for direct mode, ignored for post-based mode)