RawUGC API
Procedural knowledge for agents to call the RawUGC API. All requests require an API key from the RawUGC dashboard, passed via environment variable.
Authentication
- - Environment variable: Read the API key from
RAWUGC_API_KEY. The key is created in the RawUGC dashboard and must be kept secret; do not hardcode or log it. - Header: Send on every request:
Authorization: Bearer <value of RAWUGC_API_KEY>. - If
RAWUGC_API_KEY is missing or empty, inform the user they must set it and obtain a key from the RawUGC dashboard.
Base URL
- - Production: INLINECODE3
- All paths below are relative to this base.
API Versioning
RawUGC uses date-based API versioning. The current latest version is 2026-03-06.
- -
RawUGC-Version request header: Override the version per-request (recommended). - API key pinned version: Set when creating the key in the dashboard.
- Fallback: Latest version (
2026-03-06) if neither is set.
Always send RawUGC-Version: 2026-03-06 in requests to ensure consistent behavior.
Video Generation
POST /videos/generate
Initiate video generation.
Request body (JSON):
| Field | Type | Required | Description |
|---|
| INLINECODE8 | string | Yes | INLINECODE9 , sora-2-image-to-video, kling-2.6/motion-control, veo3, INLINECODE13 |
| INLINECODE14 |
string | For text-to-video / veo3 | Text description (1-5000 chars) |
|
imageUrls | string[] | For image-to-video / kling | URLs, max 10. Veo3/veo3_fast accept up to 2 optional images. |
|
videoUrls | string[] | For kling | URLs, max 1. Required for
kling-2.6/motion-control |
|
aspectRatio | string | No | Sora:
portrait/
landscape. Veo3:
16:9/
9:16/
Auto |
|
nFrames | string | No |
"10" or
"15" (Sora only) |
|
selectedCharacter | string | No | Character username (e.g.
rawugc.mia) |
|
characterOrientation | string | No |
image or
video (kling only) |
|
mode | string | No |
720p or
1080p (kling only) |
Response (201): videoId, model, status, creditsUsed, newBalance, estimatedCompletionTime, createdAt.
GET /videos/:videoId
Get video status. Returns videoId, status, model, prompt, creditsUsed, url (when completed), createdAt, completedAt, failCode, failMessage, versions (edit history array).
GET /videos
List videos. Query: status, limit (1-100, default 50), page. Returns videos array + pagination.
POST /videos/captions
Add styled captions to a completed video. Costs 1 credit.
| Field | Type | Required | Description |
|---|
| INLINECODE58 | string | Yes | Video identifier (vid_xxx) |
| INLINECODE59 |
string | No | Language code (e.g.
en). Defaults to auto-detect |
Response (200): videoId, url, version, operation, creditsUsed.
POST /videos/overlay
Add text overlay to a completed video.
| Field | Type | Required | Description |
|---|
| INLINECODE66 | string | Yes | Video identifier (vid_xxx) |
| INLINECODE67 |
string | Yes | Overlay text (1-500 chars) |
|
position | string | No |
top,
center, or
bottom |
|
fontSize | integer | No | 8-200 pixels |
|
topBottomMargin | integer | No | 0-500 pixels |
|
strokeThickness | number | No | 0-10 |
Response (200): videoId, url, version, operation, creditsUsed.
Image Generation
POST /images/generate
Generate AI images using Nano Banana models. Async -- poll GET /images/:imageId.
| Field | Type | Required | Description |
|---|
| INLINECODE80 | string | Yes | INLINECODE81 (text-to-image, 4 credits) or google/nano-banana-edit (image editing, 2 credits) |
| INLINECODE83 |
string | Yes | Text description or edit instruction (1-20000 chars) |
|
imageUrls | string[] | For editing | Source images. Required for
google/nano-banana-edit. Optional for
nano-banana-2 (reference images, max 14). |
|
aspectRatio | string | No | For
nano-banana-2:
1:1,
16:9,
9:16,
auto, etc. |
|
imageSize | string | No | For
google/nano-banana-edit:
1:1,
16:9,
9:16,
auto, etc. |
|
resolution | string | No | For
nano-banana-2:
1K,
2K,
4K |
|
outputFormat | string | No |
png,
jpeg,
jpg |
|
googleSearch | boolean | No | Use Google Web Search grounding (
nano-banana-2 only) |
Response (201): imageId, model, status, creditsUsed, newBalance, estimatedCompletionTime, createdAt.
GET /images/:imageId
Get image status. Returns imageId, status, model, prompt, url (when completed), imageSize, resolution, outputFormat, creditsUsed, createdAt, completedAt, failCode, failMessage.
GET /images
List images. Query: status, limit (1-100, default 20), page. Returns images array + pagination.
Music Generation
POST /music/generate
Generate AI music using Suno models. 3 credits per generation. Async -- poll GET /music/:musicId.
| Field | Type | Required | Description |
|---|
| INLINECODE135 | string | Yes | Music description (1-2000 chars) |
| INLINECODE136 |
string | No |
V3_5,
V4,
V4_5,
V4_5PLUS,
V4_5ALL,
V5 (default:
V5) |
|
instrumental | boolean | No | Instrumental only, no vocals (default: true) |
|
title | string | No | Track title (max 200 chars). Enables custom mode with
style. |
|
style | string | No | Style descriptor (max 500 chars, e.g.
lo-fi hip hop) |
Response (201): musicId, model, status, creditsUsed, newBalance, estimatedCompletionTime, createdAt.
GET /music/:musicId
Get music status. Returns musicId, status, model, prompt, audioUrl (when completed), albumArtUrl, duration, title, creditsUsed, createdAt, completedAt, failCode, failMessage.
GET /music
List music tracks. Query: status, limit (1-100, default 20), page. Returns tracks array + pagination.
Upload
POST /upload
Upload a video or image file. Returns a URL for use in generation requests (imageUrls, videoUrls) or analyze-video. Max 100MB.
Request: multipart/form-data with file field. Accepted types: video/mp4, video/quicktime, video/webm, image/png, image/jpeg, image/webp.
Response (200): url, contentType, size.
Characters
GET /characters
List all available AI characters (built-in + custom). Returns characters array, count, adminCount, userCount.
GET /characters/:characterId
Get a character by ID. Returns _id, username, displayName, description, videoPreviewUrl, type (admin/user), isActive, createdAt, updatedAt.
Personas (CRUD)
Personas define target audiences for content plan generation.
- - GET /personas -- List all. Returns
personas array + count. - POST /personas -- Create. Body:
name (required, max 200), description (required, max 5000). Returns id. - GET /personas/:personaId -- Get one.
- PATCH /personas/:personaId -- Update. Body:
name, description (both optional). - DELETE /personas/:personaId -- Delete.
PersonaResponse: _id, organizationId, name, description, createdAt, updatedAt.
Messaging (CRUD)
Brand/positioning messaging templates.
- - GET /messaging -- List all. Returns
messages array + count. - POST /messaging -- Create. Body:
name (required, max 200), body (required, max 5000). Returns id. - GET /messaging/:messageId -- Get one.
- PATCH /messaging/:messageId -- Update. Body:
name, body (both optional). - DELETE /messaging/:messageId -- Delete.
MessagingResponse: _id, organizationId, name, body, createdAt, updatedAt.
Products (CRUD)
Products for video generation.
- - GET /products -- List all. Returns
products array + count. - POST /products -- Create. Body:
name (required, max 200), photos (required, URL array), description (max 1000), messaging (max 5000). Returns id. - GET /products/:productId -- Get one.
- PATCH /products/:productId -- Update. Body:
name, description, photos, messaging (all optional). - DELETE /products/:productId -- Delete.
ProductResponse: _id, name, description, photos, messaging, createdAt, updatedAt.
Styles (CRUD)
Video/image creative styles with optional prompt templates.
- - GET /styles -- List all (built-in + custom). Query:
type (video/image). Returns styles array + count. - POST /styles -- Create. Body:
name (required, max 200), description (max 1000), type (video/image), aspectRatio (portrait/landscape/square), promptTemplate (max 5000, supports {productName}, {messaging}, {character} placeholders). Returns id. - GET /styles/:styleId -- Get one.
- PATCH /styles/:styleId -- Update. All fields optional.
- DELETE /styles/:styleId -- Delete.
StyleResponse: _id, name, description, type, aspectRatio, styleId, promptTemplate, isAdmin, isStandard.
Social Scheduling
GET /social/accounts
List connected social accounts (max 3 per org). Returns accounts array + count. Each account: accountId, platform (tiktok/instagram/youtube), username, displayName, profilePicture, isActive.
POST /social/accounts
Sync connected accounts from the scheduling provider. Returns { success: boolean }.
DELETE /social/accounts/:accountId
Disconnect a social account. Returns { success: boolean }.
POST /social/posts
Schedule, draft, or immediately publish a video to social media.
| Field | Type | Required | Description |
|---|
| INLINECODE288 | string | Yes | URL of video to post |
| INLINECODE289 |
string[] | Yes | Target account IDs |
|
mode | string | Yes |
schedule,
draft, or
now |
|
scheduledFor | integer | For schedule | Unix timestamp (ms) |
|
timezone | string | No | IANA timezone (default:
UTC) |
|
content | string | No | Caption (max 2200 chars) |
|
videoId | string | No | RawUGC video ID to link |
|
publishToInbox | boolean | No | Send to TikTok Creator Inbox |
|
tiktokPrivacyLevel | string | No |
SELF_ONLY,
PUBLIC_TO_EVERYONE,
MUTUAL_FOLLOW_FRIENDS,
FOLLOWER_OF_CREATOR |
|
tiktokAllowComment | boolean | No | Allow TikTok comments |
|
tiktokAllowDuet | boolean | No | Allow TikTok duets |
|
tiktokAllowStitch | boolean | No | Allow TikTok stitches |
|
tiktokCommercialContentType | string | No |
none,
brand_organic,
brand_content |
Response (201): SocialPost object.
GET /social/posts
List posts. Query: fromDate (ms), toDate (ms), includeDrafts (boolean). Returns posts array + count.
GET /social/posts/:postId
Get a post.
PATCH /social/posts/:postId
Update a post. Body: content, scheduledFor, timezone, accountIds (at least one field required).
DELETE /social/posts/:postId
Delete a post. Returns { success: boolean }.
POST /social/posts/:postId/reschedule
Reschedule a post. Body: scheduledFor (required, ms), timezone.
POST /social/posts/:postId/publish
Immediately publish a draft post.
SocialPost: postId, platforms, status (draft/scheduled/published/failed), scheduledFor, timezone, content, videoUrl, createdAt, publishedAt.
Viral Library
GET /viral-library/videos/:videoId
Get a viral library video with full AI analysis (hooks, keyframes, performance insights). Returns ViralLibraryVideo.
GET /viral-library/search
Semantic search across analyzed videos. Query: q (required, natural language), limit (1-50, default 20). Returns results (array of { video, score }), query, total.
Research
POST /scrape-tiktok
Scrape TikTok videos. Costs 3 credits.
| Field | Type | Required | Description |
|---|
| INLINECODE343 | string | Yes | Search keyword, hashtag, or query (max 500) |
| INLINECODE344 |
string | No |
keyword,
hashtag,
search (default:
keyword) |
|
limit | integer | No | 1-10 (default: 10) |
Response (200): scrapeId (use with content-plans), count, videos (array with id, url, author, description, stats, duration, hashtags, thumbnail, videoUrl).
POST /content-plans
Generate a content plan from scraped videos. Costs 3 credits.
| Field | Type | Required | Description |
|---|
| INLINECODE362 | string | Yes | From scrape-tiktok response |
| INLINECODE363 |
string | Yes | Content plan goals (max 5000) |
Response (200): planId, scrapeId, brief, topWins, gapsToTest, blueprints (array with category, strategy, evidence, contentIdeas).
GET /content-plans
List all content plans. Returns plans array + count.
POST /analyze-video
Analyze any video URL (social links or direct URLs). Costs 1 credit. Max 150MB.
| Field | Type | Required | Description |
|---|
| INLINECODE376 | string | Yes | Video URL to analyze |
| INLINECODE377 |
string | No | Custom analysis prompt (max 5000) |
Response (200): summary, hook, keyframes (array with timestamp, type, description, visual, audio, text), durationSeconds, tags, whyItPerformed, attributesToCopy, hooksToTest.
Errors
All error responses use RFC 7807 Problem Details (JSON): type, title, status, detail, instance, errors.
| Status | Meaning |
|---|
| 400 | Validation error. Surface detail and errors to user. |
| 401 |
Auth error. Check
RAWUGC_API_KEY. |
| 402 | Insufficient credits. Add credits in dashboard. |
| 403 | Insufficient scope. API key lacks permissions. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded. Check
X-RateLimit-Reset header. |
| 500 | Server error. Retry or contact support. |
Rate Limits
- - API Key: 10 req/min. Session: 20 req/min.
- Headers:
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (unix timestamp).
Workflow: Generate then poll
- 1. Generate: POST to the generation endpoint. Note the returned ID (
videoId/imageId/musicId). - Poll: GET the status endpoint periodically (10-30s). Use exponential backoff.
- Finish: When
status === 'completed', use the result URL. When failed, surface error to user. - Edit (video only): POST to
/videos/captions or /videos/overlay.
For full request/response shapes, see reference.md.
RawUGC API
供智能体调用RawUGC API的程序性知识。所有请求都需要通过环境变量传递RawUGC控制面板生成的API密钥。
身份认证
- - 环境变量:从RAWUGCAPIKEY读取API密钥。该密钥在RawUGC控制面板中创建,必须保密;请勿硬编码或记录日志。
- 请求头:每次请求发送:Authorization: Bearer APIKEY的值>。
- 如果RAWUGCAPIKEY缺失或为空,告知用户必须设置该变量并从RawUGC控制面板获取密钥。
基础URL
- - 生产环境:https://rawugc.com/api/v1
- 以下所有路径均相对于此基础URL。
API版本管理
RawUGC使用基于日期的API版本管理。当前最新版本为2026-03-06。
- - RawUGC-Version请求头:按请求覆盖版本(推荐)。
- API密钥固定版本:在控制面板创建密钥时设置。
- 回退版本:如果两者均未设置,则使用最新版本(2026-03-06)。
始终在请求中发送RawUGC-Version: 2026-03-06以确保行为一致。
视频生成
POST /videos/generate
启动视频生成。
请求体(JSON):
| 字段 | 类型 | 必填 | 描述 |
|---|
| model | 字符串 | 是 | sora-2-text-to-video、sora-2-image-to-video、kling-2.6/motion-control、veo3、veo3_fast |
| prompt |
字符串 | 文本转视频/veo3必填 | 文本描述(1-5000字符) |
| imageUrls | 字符串数组 | 图片转视频/kling必填 | URL,最多10个。Veo3/veo3_fast最多接受2个可选图片。 |
| videoUrls | 字符串数组 | kling必填 | URL,最多1个。kling-2.6/motion-control必填 |
| aspectRatio | 字符串 | 否 | Sora:portrait/landscape。Veo3:16:9/9:16/Auto |
| nFrames | 字符串 | 否 | 10或15(仅Sora) |
| selectedCharacter | 字符串 | 否 | 角色用户名(例如rawugc.mia) |
| characterOrientation | 字符串 | 否 | image或video(仅kling) |
| mode | 字符串 | 否 | 720p或1080p(仅kling) |
响应(201):videoId、model、status、creditsUsed、newBalance、estimatedCompletionTime、createdAt。
GET /videos/:videoId
获取视频状态。返回videoId、status、model、prompt、creditsUsed、url(完成时)、createdAt、completedAt、failCode、failMessage、versions(编辑历史数组)。
GET /videos
列出视频。查询参数:status、limit(1-100,默认50)、page。返回videos数组 + pagination。
POST /videos/captions
为已完成的视频添加样式字幕。消耗1积分。
| 字段 | 类型 | 必填 | 描述 |
|---|
| videoId | 字符串 | 是 | 视频标识符(vid_xxx) |
| language |
字符串 | 否 | 语言代码(例如en)。默认为自动检测 |
响应(200):videoId、url、version、operation、creditsUsed。
POST /videos/overlay
为已完成的视频添加文字叠加层。
| 字段 | 类型 | 必填 | 描述 |
|---|
| videoId | 字符串 | 是 | 视频标识符(vid_xxx) |
| text |
字符串 | 是 | 叠加文字(1-500字符) |
| position | 字符串 | 否 | top、center或bottom |
| fontSize | 整数 | 否 | 8-200像素 |
| topBottomMargin | 整数 | 否 | 0-500像素 |
| strokeThickness | 数字 | 否 | 0-10 |
响应(200):videoId、url、version、operation、creditsUsed。
图片生成
POST /images/generate
使用Nano Banana模型生成AI图片。异步——轮询GET /images/:imageId。
| 字段 | 类型 | 必填 | 描述 |
|---|
| model | 字符串 | 是 | nano-banana-2(文本转图片,4积分)或google/nano-banana-edit(图片编辑,2积分) |
| prompt |
字符串 | 是 | 文本描述或编辑指令(1-20000字符) |
| imageUrls | 字符串数组 | 编辑必填 | 源图片。google/nano-banana-edit必填。nano-banana-2可选(参考图片,最多14张)。 |
| aspectRatio | 字符串 | 否 | 对于nano-banana-2:1:1、16:9、9:16、auto等。 |
| imageSize | 字符串 | 否 | 对于google/nano-banana-edit:1:1、16:9、9:16、auto等。 |
| resolution | 字符串 | 否 | 对于nano-banana-2:1K、2K、4K |
| outputFormat | 字符串 | 否 | png、jpeg、jpg |
| googleSearch | 布尔值 | 否 | 使用Google网页搜索基础(仅nano-banana-2) |
响应(201):imageId、model、status、creditsUsed、newBalance、estimatedCompletionTime、createdAt。
GET /images/:imageId
获取图片状态。返回imageId、status、model、prompt、url(完成时)、imageSize、resolution、outputFormat、creditsUsed、createdAt、completedAt、failCode、failMessage。
GET /images
列出图片。查询参数:status、limit(1-100,默认20)、page。返回images数组 + pagination。
音乐生成
POST /music/generate
使用Suno模型生成AI音乐。每次生成消耗3积分。异步——轮询GET /music/:musicId。
| 字段 | 类型 | 必填 | 描述 |
|---|
| prompt | 字符串 | 是 | 音乐描述(1-2000字符) |
| model |
字符串 | 否 | V3
5、V4、V45、V4
5PLUS、V45ALL、V5(默认:V5) |
| instrumental | 布尔值 | 否 | 仅纯音乐,无人声(默认:true) |
| title | 字符串 | 否 | 曲目标题(最多200字符)。启用带style的自定义模式。 |
| style | 字符串 | 否 | 风格描述(最多500字符,例如lo-fi hip hop) |
响应(201):musicId、model、status、creditsUsed、newBalance、estimatedCompletionTime、createdAt。
GET /music/:musicId
获取音乐状态。返回musicId、status、model、prompt、audioUrl(完成时)、albumArtUrl、duration、title、creditsUsed、createdAt、completedAt、failCode、failMessage。
GET /music