diff --git a/public/llms-full.txt b/public/llms-full.txt index 3d2cd8a..f6a5ac3 100644 --- a/public/llms-full.txt +++ b/public/llms-full.txt @@ -79,6 +79,15 @@ id may be underscore-joined for multi-delete (e.g. "7_8_9"). → 200 empty ``` +MCP shortcuts for avatar management: +- `gen_list_agent_avatars(agent_id)` — list avatars for an agent +- `gen_create_agent_avatar(agent_id, degod_avatar_id)` — attach a DeGod collection avatar +- `gen_delete_agent_avatar(agent_id, avatar_id)` — delete one or more avatars +- `gen_add_agent_look(agent_id, signed_id)` — attach an uploaded image as a non-primary look (after `gen_create_direct_upload`) +- `gen_set_agent_primary_photo(agent_id, signed_id)` — upload and set as primary avatar (replaces existing primary) +- `gen_add_agent_account(agent_id, url, platform?)` — add one of the agent's OWN social accounts (what it posts from) +- `gen_add_agent_inspiration(agent_id, url)` — add one inspiration source (creator the agent draws style from) + ## Agent Core (preferred single-call setup) **Use this for all agent setup reads and writes.** Flat endpoint. Every field name mirrors the GEN Setup canvas. @@ -294,6 +303,26 @@ DELETE /v1/persisted_tokens/{id}/revoke DELETE /v1/persisted_tokens/revoke_all ``` +## Agent Profile (agentic service mirror, `https://agent.gen.pro/v1`) + +The agent profile is a lightweight mirror of agent setup as seen by the ideas/research service. Use `gen_get_agent_core` / `gen_update_agent_core` (Rails) for the authoritative read/write. These endpoints are useful when you need to check or reset how the agentic service sees the agent, or to set `content_idea_preferences` (persistent rules for future idea runs). + +``` +GET /v1/agent/profile?agent_id={id} +→ { identity: { name, description, persona }, voice: { api_keys, default_voice }, brand: { brand_name, description, goal, keywords, target_platforms, shortform, longform, linked_accounts, content_idea_preferences } } + +POST /v1/agent/profile?agent_id={id} +Body: { identity?, voice?, brand? } +→ updated profile + +PUT /v1/agent/profile?agent_id={id} +Body: { identity?, voice?, brand? } (replaces; same shape as POST) + +DELETE /v1/agent/profile?agent_id={id} — resets brand section only (does NOT delete the agent) +``` + +`content_idea_preferences` (inside `brand`) holds persistent plain-text rules applied to every future idea generation, e.g. `"- always use statement hooks\n- never mention competitors"`. + --- # Phase 2 — Ideas @@ -342,6 +371,8 @@ Live progress: Backend/API-first contract for combining multiple songs into one long DJ-style audio output. +MCP tool: `gen_create_song_mix(agent_id, tracks?, prompt?, transition_style?, output_format?, auto_order?, desired_duration_seconds?, generate_missing_count?)` — combine existing songs into a DJ-style mix. Returns `status=pending_engine` until the renderer worker is installed, or `pending_song_generation` when source songs must be generated first. + ``` POST /v1/audio/mixes Body: { @@ -396,6 +427,8 @@ PATCH /v1/agent/conversations/{id} — Body: { title?, pinne DELETE /v1/agent/conversations/{id} — deletes conversation, runs, messages ``` +MCP tools: `gen_list_conversations(agent_id)`, `gen_get_conversation(agent_id, conversation_id)`, `gen_get_session_preferences(agent_id, conversation_id)`, `gen_update_session_preferences(agent_id, conversation_id, preferences)`. + ## Content Ideas Ideas produced by runs are first-class records. @@ -431,6 +464,8 @@ Edit/rejection statuses: `change_idea`, `change_video`, `rejected`. Video type IDs: `0=Any, 1=Talking Avatar, 2=Green Screen, 3=Montage, 4=Text-Driven, 5=POV Object, 6=Narrated/VO, 8=Split Screen, 9=Skit`. +MCP tools: `gen_list_content_ideas(agent_id, status?)`, `gen_update_idea_status(agent_id, idea_id, status)`, `gen_expand_idea(agent_id, idea_id)`, `gen_refine_content_ideas(agent_id, conversation_id, feedback)`, `gen_decide_agent_run(agent_id, run_id, approved)`, `gen_set_content_preference(agent_id, preference)`. + ## Research (standalone) ``` @@ -443,6 +478,8 @@ Poll `GET /v1/agent/runs/{run_id}` until `status` is `completed`. Completed mess Depths: `quick`, `default`, `deep`. +MCP tool: `gen_run_research(agent_id, topic, depth?)` — returns a `run_id` to poll with `gen_get_run_status`. + ## Research topics (daily background research) Configured via Agent Core (`research_topics` field). The platform researches each topic daily and feeds findings into the Ideas Engine automatically. No poll needed — just set topics and consume ideas downstream. @@ -480,9 +517,9 @@ Only pending/processing jobs can be updated. | Instagram | Yes | Yes | No | | YouTube | Yes | Yes | Yes | -### Pricing +### Credit usage -Per video/post: $0.015. Per comment (when enabled): $0.002. +Content monitoring uses credits per post and comment scraped. Check your balance with `GET /v1/credit_balance?agent_id={id}` before starting large jobs. ### Reading scraped data @@ -492,6 +529,8 @@ No raw data dump endpoint — query through the agent: Status flow: `pending → processing → completed` (one-time) or stays `processing` (monitoring). Poll `GET /v1/user_jobs/{id}?agent_id={id}`. +MCP tools: `gen_create_monitoring_job(agent_id, platform, search_type, value, days?, country?, max_results?, monitoring?, comment_monitoring?)`, `gen_update_monitoring_job(agent_id, job_id, ...)` — only pending/processing jobs can be updated. + --- # Phase 3 — Convert @@ -563,6 +602,8 @@ Types: `text`, `image`, `video`, `audio`. ``` GET /v1/vidsheet/{id}/columns?agent_id={id} POST /v1/vidsheet/{id}/columns?agent_id={id} Body: { spreadsheet_column: { title, type, position? } } +PATCH /v1/vidsheet/{id}/columns/{col_id}?agent_id={id} Body: { spreadsheet_column: { title?, type?, position? } } +DELETE /v1/vidsheet/{id}/columns/{col_id}?agent_id={id} POST /v1/vidsheet/{id}/columns/{col_id}/duplicate?agent_id={id} PATCH /v1/vidsheet/{id}/columns/update_positions?agent_id={id} PUT /v1/vidsheet/{id}/columns/mass_update?agent_id={id} @@ -608,6 +649,13 @@ POST /v1/generations/{id}/stop — credits refunded; status → "stopped" POST /v1/generations/{id}/continue — credits re-charged; status → "pending" ``` +MCP tools: +- `gen_generate_content(agent_id, sheet_id, cell_id, generation_type, data)` — THE WORKHORSE. Trigger cell generation. Returns `generation_id` to poll with `gen_get_generation`. +- `gen_generate_layer(agent_id, sheet_id, cell_id, layer_id)` — trigger generation for a specific layer (uses the layer's already-configured generation type and data). +- `gen_get_generation(generation_id)` — poll until `status == "completed"`, then read `output_resources`. +- `gen_stop_generation(generation_id)` — stop and refund credits. +- `gen_continue_generation(generation_id)` — resume a stopped generation (credits re-charged). + Status flow: `pending → processing → completed | failed | stopped`. ## Creation Card Types (exact `generation_type` + `data`) @@ -635,9 +683,9 @@ Output: image content resource ``` generation_type: "video_from_text" -Models: veo_3, veo_3_fast, veo_3_1, veo_3_1_fast, sora_2, kling_1_6, seedance_pro, seedance_pro_1_5, grok +Models: veo_3, veo_3_fast, veo_3_1, veo_3_1_fast, sora_2, kling_1_6, kling_2_1, kling_2_6, seedance-2.0, seedance-1.5-pro, seedance-1.0-pro, seedance-1.0-lite, seedance_pro, seedance_pro_1_5, grok Aspect ratios: "1:1", "9:16", "16:9"; grok also supports "4:3", "3:4", "3:2", "2:3" -Durations: model-dependent +Durations: model-dependent (seedance-2.0 supports 4-15s) data: { prompt, negative_prompt?, model, aspect_ratio, resolution?, duration, native_audio?, variables } Resolution values: `1080p` or `720p` when supported by the selected model. Native audio is optional and defaults to false when omitted. Output: video content resource @@ -647,7 +695,7 @@ Output: video content resource ``` generation_type: "video_from_image" -Models: kling_2_1, kling_2_6, veo_3, veo_3_fast, veo_3_1, veo_3_1_fast, sora_2, seedance_lite, seedance_pro, seedance_pro_1_5, grok +Models: kling_2_1, kling_2_6, veo_3, veo_3_fast, veo_3_1, veo_3_1_fast, sora_2, seedance-2.0, seedance_lite, seedance_pro, seedance_pro_1_5, grok data: { prompt, negative_prompt?, model, image_resource_id, image_tail_resource_id?, aspect_ratio, resolution?, duration, native_audio? } Resolution values: `1080p` or `720p` when supported by the selected model. Native audio is optional and defaults to false when omitted. Output: video content resource @@ -767,6 +815,14 @@ Workflow: Compute checksum: openssl md5 -binary file | base64 ``` +MCP tools for asset management: +- `gen_create_direct_upload(agent_id, filename, byte_size, checksum, content_type)` — returns `signed_id` + upload URL +- `gen_complete_asset_upload(agent_id, signed_id)` — attach an already-uploaded blob to the agent's durable asset library; returns `content_resource` id and CDN URL +- `gen_create_content_resource(agent_id, signed_id)` — create a content resource from a signed_id (alias for the POST endpoint above) +- `gen_list_content_resources(agent_id, type?)` — list content resources with optional type filter +- `gen_get_content_resource(agent_id, id)` — get a single resource with its public URL and generator info +- `gen_delete_content_resource(agent_id, id)` — permanently delete a content resource + ## Proof of Genesis / Backup to Blockchain (`https://agent-core.gen.pro/v1`) Proof of Genesis backs up assets from the GEN assets page or vidsheet workflows to Walrus and records proof metadata. It supports manual add/remove and automatic backup of selected asset events. @@ -958,66 +1014,88 @@ curl -L -o final_video.mp4 "https://cdn.gen.pro/outputs/render_xyz.mp4" CDN URLs are public and permanent until you explicitly delete the content resource. Individual layer outputs are also downloadable via each layer's `default_user_job.output_resources[0].url`. +## Connect Social Accounts + +Base URL for social connect and scheduling: `https://python.gen.pro` + +Connect accounts with OAuth — never pass credentials through the API. + +``` +GET /platform/get_authorization_url?agent_id={id}&platform={platform} +→ { url: "https://..." } ← user opens this in a browser +``` + +Supported platforms: `tiktok` | `instagram` | `facebook` | `youtube` | `x` + +``` +GET /platform/get_oauth_account?agent_id={id} +→ [ { platform, account_name, connected_at, ... } ] + +PUT /platform/disconnect/{platform} +Body: { "agent_id": "{id}" } +→ 200 +``` + +MCP tools: `gen_get_social_connect_url`, `gen_list_connected_socials`, `gen_disconnect_social` + ## Publish to Social -Currently TikTok. Instagram and YouTube coming. +Supported platforms: **TikTok, Instagram, Facebook, YouTube, X**. Base URL: `https://python.gen.pro` ``` -POST /v1/user_jobs?agent_id={id} +POST /schedule/with-post Content-Type: application/json -Body: -{ - "user_job_type": "publish_content", - "data": "{\"platform\":\"tiktok\",\"media_url\":\"https://cdn.gen.pro/outputs/render_xyz.mp4\",\"description\":\"caption #hashtags\",\"schedule_type\":\"now\",\"media_type\":\"VIDEO\"}" -} -→ { user_job_id } ``` -Data fields (JSON-stringified in `data`): +Fields: | Field | Type | Required | Notes | |-------|------|----------|-------| -| `platform` | string | Yes | `tiktok` | -| `media_url` | string | Yes | public URL to media (render URL works directly) | -| `description` | string | Yes | caption, max ~2200 chars for TikTok; include hashtags inline | -| `title` | string | No | post title | -| `media_type` | string | No | `VIDEO` (default) \| `IMAGE` | -| `schedule_type` | string | Yes | `now` \| `scheduled` | -| `scheduled_time` | string | if `scheduled` | ISO 8601 UTC, must be future | +| `agent_id` | string | Yes | agent posting the content | +| `platform` | string[] | Yes | e.g. `["tiktok"]` or `["instagram"]` | +| `schedule_type` | string | Yes | `now` \| `specific_time` | +| `scheduled_time` | string | if `specific_time` | ISO 8601 UTC, must be future | +| `description` | string | Yes for text/recommended | caption; include hashtags inline | +| `media_url` | string | No | single video URL | +| `media_urls` | string[] | No | image URLs (X: up to 4) | +| `title` | string | No | post title (YouTube) | +| `media_type` | string | No | `VIDEO` (default) \| `IMAGE` \| `TWEET_VIDEO` | | `thumbnail_url` | string | No | custom thumbnail URL | -| `timezone_offset` | integer | No | minutes from UTC | +| `timezone_offset` | number | No | UTC offset in hours (e.g. `-7` for PDT) | +| `thread` | object[] | No | **X only** — `[{text, media_urls?}]` chain | +| `reply_to_tweet_id` | string | No | **X only** — reply to this tweet id | -### Upload media (upload_asset) +Post now (TikTok): -Posts reference media by URL (public at post time). Upload a local file to get a hosted URL and save it to the agent's Assets. - -``` -POST /v1/social/upload_asset (multipart/form-data) -Fields: file=, agent_id= --> { "url": "https://cdn.gen.pro/...", "asset_id": "123", "content_resource_id": 123, "asset_registered": true } +```json +{ + "agent_id": "", + "platform": ["tiktok"], + "description": "caption #hashtags", + "media_url": "https://cdn.gen.pro/outputs/render_xyz.mp4", + "media_type": "VIDEO", + "schedule_type": "now" +} ``` -Use the returned `url` as `media_url` or an entry in `media_urls`. Upload -> post: +Schedule for later (Instagram): -```bash -URL=$(curl -s -X POST "https://api.gen.pro/v1/social/upload_asset" -H "X-API-Key: $KEY" \ - -F "file=@image.jpg" -F "agent_id=$AGENT" | python3 -c "import sys,json;print(json.load(sys.stdin)['url'])") -curl -X POST "https://api.gen.pro/v1/schedule/with-post" -H "X-API-Key: $KEY" -H "Content-Type: application/json" \ - -d "{\"agent_id\":\"$AGENT\",\"platform\":[\"x\"],\"media_type\":\"IMAGE\",\"media_urls\":[\"$URL\"],\"schedule_type\":\"now\",\"description\":\"hi\"}" +```json +{ + "agent_id": "", + "platform": ["instagram"], + "description": "Morning routine 🌅 #wellness", + "media_url": "https://cdn.gen.pro/outputs/render_xyz.mp4", + "schedule_type": "specific_time", + "scheduled_time": "2026-08-01T09:00:00Z" +} ``` -For up to 4 images on X, call upload_asset per file and pass all URLs in `media_urls`. - -### X (Twitter) posting - -X supports the richest post set via `POST /v1/schedule/with-post` (the `gen_schedule_post` tool). Beyond a single text/video tweet, X adds up to 4 images per tweet, threads, and replies. +X thread: -``` -POST /v1/schedule/with-post -Content-Type: application/json -Body: +```json { - "agent_id": "", + "agent_id": "", "platform": ["x"], "schedule_type": "now", "thread": [ @@ -1028,32 +1106,48 @@ Body: } ``` -X-specific fields on the schedule body: +`thread` and `reply_to_tweet_id` are ignored for TikTok/Instagram/Facebook/YouTube. A thread that fails partway stops at the failed segment and is marked failed (not retried, to avoid duplicates). -| Field | Type | Required | Notes | -|-------|------|----------|-------| -| `platform` | string[] | Yes | include `"x"` | -| `description` | string | for text/reply | the tweet text | -| `media_urls` | string[] | No | up to 4 image URLs for one tweet | -| `media_type` | string | No | `TWEET_VIDEO` for video, `IMAGE` for images | -| `thread` | object[] | No | **X only.** ordered list of `{text, media_urls?}` tweet segments; posted as a chain | -| `reply_to_tweet_id` | string | No | **X only.** reply to an existing tweet id; combine with `thread` to reply-then-chain | +### Upload media (direct upload) -`thread` and `reply_to_tweet_id` are ignored for TikTok/Instagram/Facebook/YouTube (single-media platforms). A thread that fails partway stops at the failed segment, records the tweets already posted, and is marked failed (not retried, to avoid duplicates). +Upload a local file to get a hosted CDN URL for use in `media_url`/`media_urls`. Three-step flow: -### Poll the publish job +``` +# Step 1: get a pre-signed upload URL +POST /v1/direct_upload +{ blob: { filename, byte_size, checksum, content_type } } +→ { signed_id, direct_upload: { url, headers } } +# Step 2: PUT the file to the signed URL (no auth header needed) +PUT (file bytes, Content-Type header from direct_upload.headers) + +# Step 3: register the asset in GEN's library +POST /v1/content_resources?agent_id={id} +{ content_resource: { file: } } +→ { id, url, ... } ``` -GET /v1/user_jobs/{id}?agent_id={id} + +MCP tools: `gen_create_direct_upload` (Step 1) → `gen_complete_asset_upload` (Step 3). +For up to 4 images on X, upload each file and pass all resulting URLs in `media_urls`. + +### Content calendar + +``` +GET /schedule/posts?agent_id={id}[&start_date=2026-08-01&end_date=2026-08-31] +GET /schedule/post/{post_id} → { id, status, platforms: [{platform, status, post_url, published_at}] } +PATCH /schedule/post/{post_id} → update before it publishes (e.g. reschedule or edit caption) +DELETE /schedule/post/{post_id} → cancel a scheduled post ``` -Status flow: `pending → processing → completed | failed`. On `completed`, `result.post_id` is the platform's post ID. +Status flow: `accepted → publishing → published | failed`. On `published`, `platforms[0].post_url` is the live link. + +MCP tools: `gen_schedule_post`, `gen_list_scheduled_posts`, `gen_get_post_status`, `gen_update_scheduled_post`, `gen_delete_scheduled_post` ### Prerequisites -- Agent must have a connected TikTok account (connected via the GEN app) -- Media must be publicly accessible at post time -- For scheduled posts, `scheduled_time` must be in the future +- Agent must have a connected account for the target platform (OAuth via `get_authorization_url`) +- Media URL must be publicly accessible at post time +- `scheduled_time` must be in the future for `specific_time` posts --- @@ -1178,6 +1272,7 @@ DELETE /v1/agents/{agent_id}/watchlists/{watchlist_id}/sources?platform=&target_ restoring it if it had been soft-deleted. - **`PATCH /watchlists/:id` with `{"intent_active": false}`** is the pause primitive; `true` resumes. Use `DELETE` only to permanently retire. + MCP: `gen_pause_watchlist(agent_id, watchlist_id)` / `gen_resume_watchlist(agent_id, watchlist_id)`. - **`DELETE`** is a soft delete: rows are marked inactive and `deleted_at` is set; nothing is returned by subsequent `GET`/`list`. @@ -1314,10 +1409,15 @@ delivery. ### Pause / resume / delete - `POST /recurring-jobs/:id/pause` → `status = "paused"`, scheduler stops - queueing new runs. History and configuration preserved. -- `POST /recurring-jobs/:id/resume` → `status = "active"`. + queueing new runs. History and configuration preserved. MCP: `gen_pause_recurring_job(agent_id, job_id)` +- `POST /recurring-jobs/:id/resume` → `status = "active"`. MCP: `gen_resume_recurring_job(agent_id, job_id)` +- `POST /recurring-jobs/:id/test-run` → fires one immediate execution now, + same path as a scheduled run. Returns `202 Accepted` with `run_id` to poll + via `GET /v1/agent/runs/:run_id`. Credits charged per normal execution. MCP: `gen_run_recurring_job_now(agent_id, job_id)` - `DELETE /recurring-jobs/:id` → `status = "deleted"`, returns 204. Use - pause for reversible stops. + pause for reversible stops. MCP: `gen_delete_recurring_job(agent_id, job_id)` +- Get a single job: `gen_get_recurring_job(agent_id, job_id)` — returns 404 if deleted. +- Idempotent default setup: `gen_ensure_default_recurring_job(agent_id)` — creates the default daily content-ideas job if none exists. ### Credit semantics @@ -1332,7 +1432,7 @@ next cadence tick. # Integrations -- MCP Server: remote endpoint `https://mcp.gen.pro/mcp` with `Authorization: Bearer `, or local stdio package `uvx gen-mcp-server` (Python, PyPI; env `GEN_API_KEY`). Exposes 100 gen_* tools, 9 prompts, and 3 guidance resources. +- MCP Server: remote endpoint `https://mcp.gen.pro/mcp` with `Authorization: Bearer `, or local stdio package `uvx gen-mcp-server` (Python, PyPI; env `GEN_API_KEY`). Exposes 142 gen_* tools, 9 prompts, and 3 guidance resources. - TypeScript SDK: `npm install @poweredbygen/gen-sdk` - n8n: HTTP Request node with `X-API-Key` header - OpenAPI 3.1: https://api.gen.pro/openapi.yaml (every operation carries `x-phase`) diff --git a/public/llms.txt b/public/llms.txt index 334e6d1..186b752 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -480,9 +480,9 @@ Only `ingredient` role columns can be created / updated / deleted. ## Step 5 — Export & Publish -**What it is.** Composite all layers on the final_video cell into one MP4 (render), download it, optionally publish to TikTok (Instagram / YouTube coming). +**What it is.** Composite all layers on the final_video cell into one MP4 (render), download it, and publish to social platforms: TikTok, Instagram, Facebook, YouTube, and X. -**Mental model.** Render is an async generation like any other — trigger it on the final_video cell, poll until completed, then the `output_resources[0].url` is a public CDN URL. Publishing is a user_job that takes a `media_url` (the render URL works directly). +**Mental model.** Render is an async generation — trigger it on the final_video cell, poll until completed, then the `output_resources[0].url` is a public CDN URL. Publishing takes a `media_url` (the render URL works directly). Connect social accounts first via the OAuth flow. **Render:** @@ -492,25 +492,13 @@ curl -X POST "https://api.gen.pro/v1/vidsheet/$ENGINE_ID/cells/$FINAL_VIDEO_CELL # → { "generation_id": 56789, "status": "pending" } ``` -**Poll:** +**Poll render:** ```bash curl "https://api.gen.pro/v1/generations/56789" \ -H "X-API-Key: $GEN_API_KEY" # pending → processing → completed | failed -# on completed: -# { -# "id": 56789, -# "status": "completed", -# "output_resources": [ -# { -# "id": 4821, -# "url": "https://cdn.gen.pro/outputs/render_xyz.mp4", -# "thumbnail_url": "https://cdn.gen.pro/thumbnails/render_xyz.jpg", -# "object_type": "video" -# } -# ] -# } +# on completed: output_resources[0].url is a public CDN URL ``` **Download** (public CDN URL, no auth needed): @@ -519,45 +507,70 @@ curl "https://api.gen.pro/v1/generations/56789" \ curl -L -o final_video.mp4 "https://cdn.gen.pro/outputs/render_xyz.mp4" ``` -**Publish to TikTok now** (chain from the render URL): +**Connect a social account** (OAuth URL — user opens in browser): ```bash -curl -X POST "https://api.gen.pro/v1/user_jobs?agent_id=$AGENT_ID" \ +curl "https://python.gen.pro/platform/get_authorization_url?agent_id=$AGENT_ID&platform=tiktok" \ + -H "X-API-Key: $GEN_API_KEY" +# → { "url": "https://..." } ← open this in a browser +``` + +**Publish now** (TikTok — chain from the render URL): + +```bash +curl -X POST "https://python.gen.pro/schedule/with-post" \ -H "X-API-Key: $GEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ - "user_job_type": "publish_content", - "data": "{\"platform\":\"tiktok\",\"media_url\":\"https://cdn.gen.pro/outputs/render_xyz.mp4\",\"description\":\"The $2 taco at 2am #streetfood #tacotok\",\"schedule_type\":\"now\",\"media_type\":\"VIDEO\"}" + "agent_id": "'$AGENT_ID'", + "platform": ["tiktok"], + "media_url": "https://cdn.gen.pro/outputs/render_xyz.mp4", + "description": "The $2 taco at 2am #streetfood #tacotok", + "media_type": "VIDEO", + "schedule_type": "now" }' -# → { "user_job_id": 138860 } ``` **Schedule for later:** ```bash -# same body but: -# "schedule_type": "scheduled", -# "scheduled_time": "2026-04-20T15:00:00Z" +curl -X POST "https://python.gen.pro/schedule/with-post" \ + -H "X-API-Key: $GEN_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "'$AGENT_ID'", + "platform": ["instagram"], + "media_url": "https://cdn.gen.pro/outputs/render_xyz.mp4", + "description": "Morning routine 🌅 #wellness", + "schedule_type": "specific_time", + "scheduled_time": "2026-08-01T09:00:00Z" + }' ``` -**Poll publish job:** +**Check publish status:** ```bash -curl "https://api.gen.pro/v1/user_jobs/138860?agent_id=$AGENT_ID" \ +curl "https://python.gen.pro/schedule/post/POST_ID" \ -H "X-API-Key: $GEN_API_KEY" -# pending → processing → completed | failed -# on completed: result.post_id is the TikTok post ID +# status: accepted → publishing → published | failed +# on published: platforms[0].post_url is the live link ``` -**Prerequisites for publish.** The agent must have a connected TikTok account. The media URL must be publicly accessible at post time. +**Prerequisites for publish.** The agent must have a connected social account for the target platform (connected via OAuth). The media URL must be publicly accessible at post time. ### Step 5 endpoints ``` -POST /v1/vidsheet/:id/cells/:cell_id/render?agent_id= — kick off render -GET /v1/generations/:id — poll render -POST /v1/user_jobs?agent_id= (publish_content) — publish now / schedule -GET /v1/user_jobs/:id?agent_id= — poll publish job +POST /v1/vidsheet/:id/cells/:cell_id/render?agent_id= — kick off render (api.gen.pro) +GET /v1/generations/:id — poll render (api.gen.pro) +GET /platform/get_authorization_url — OAuth connect URL (python.gen.pro) +GET /platform/get_oauth_account — list connected socials (python.gen.pro) +PUT /platform/disconnect/:platform — disconnect social (python.gen.pro) +POST /schedule/with-post — post or schedule (python.gen.pro) +GET /schedule/posts — content calendar (python.gen.pro) +GET /schedule/post/:id — poll post status (python.gen.pro) +PATCH /schedule/post/:id — update scheduled post (python.gen.pro) +DELETE /schedule/post/:id — delete scheduled post (python.gen.pro) ``` --- @@ -599,14 +612,14 @@ Models: `gemini_image`, `gemini_pro_image`, `midjourney`, `grok`. Aspect ratios: { "generation_type": "video_from_text", "data": { "prompt": "...", "model": "veo_3", "aspect_ratio": "9:16", "resolution": "1080p", "duration": 10, "native_audio": false, "negative_prompt": "no text overlays" } } ``` -Models: `veo_3`, `veo_3_fast`, `veo_3_1`, `veo_3_1_fast`, `sora_2`, `kling_1_6`, `seedance_pro`, `seedance_pro_1_5`, `grok`. Aspect ratios: `1:1`, `9:16`, `16:9`; Grok also supports `4:3`, `3:4`, `3:2`, `2:3`. Duration and resolution are model-dependent; use `resolution: "1080p"` or `"720p"` where supported. `native_audio` is optional and defaults to `false`. +Models: `veo_3`, `veo_3_fast`, `veo_3_1`, `veo_3_1_fast`, `sora_2`, `kling_1_6`, `kling_2_1`, `kling_2_6`, `seedance-2.0`, `seedance-1.5-pro`, `seedance-1.0-pro`, `seedance-1.0-lite`, `seedance_pro`, `seedance_pro_1_5`, `grok`. Aspect ratios: `1:1`, `9:16`, `16:9`; Grok also supports `4:3`, `3:4`, `3:2`, `2:3`. Duration and resolution are model-dependent (seedance-2.0 supports 4-15s); use `resolution: "1080p"` or `"720p"` where supported. `native_audio` is optional and defaults to `false`. ### video_from_image ```json { "generation_type": "video_from_image", "data": { "image_resource_id": 4821, "image_tail_resource_id": 4822, "prompt": "...", "model": "kling_2_6", "aspect_ratio": "9:16", "resolution": "1080p", "duration": 5, "native_audio": false } } ``` -Models: `kling_2_1`, `kling_2_6`, `veo_3`, `veo_3_1`, `sora_2`, `seedance_lite`, `seedance_pro`, `seedance_pro_1_5`, `grok`. `image_tail_resource_id` optional. `resolution` and `native_audio` are optional and model-dependent. +Models: `kling_2_1`, `kling_2_6`, `veo_3`, `veo_3_1`, `sora_2`, `seedance-2.0`, `seedance_lite`, `seedance_pro`, `seedance_pro_1_5`, `grok`. `image_tail_resource_id` optional. `resolution` and `native_audio` are optional and model-dependent. ### video_from_ingredients ```json @@ -795,29 +808,41 @@ Local install example: GEN_API_KEY=your-pat uvx gen-mcp-server ``` -The current MCP exposes 150 `gen_*` tools, 9 prompts, and 3 guidance resources. Key tools by category: +The current MCP exposes 142 `gen_*` tools, 9 prompts, and 3 guidance resources. Key tools by category: + +**Natural-language delegation (start here for fuzzy goals):** `gen_ask` (questions about social data — links, accounts, hashtags, trends), `gen_chat` (open-ended build goals), `gen_run_research` (deep topic research across 10+ platforms), `gen_generate_content_ideas` (data-driven ideas/scripts), `gen_refine_content_ideas` (iterate with feedback). + +**Content ideas lifecycle:** `gen_list_content_ideas` (see all ideas), `gen_expand_idea` (expand one idea to a full scene plan), `gen_update_idea_status` (approve/reject/archive), `gen_set_content_preference` (persistent rules for future generations), `gen_get_session_preferences` / `gen_update_session_preferences` (per-conversation creative rules), `gen_decide_agent_run` (approve/reject a pending agent action gate). + +**Conversations:** `gen_list_conversations`, `gen_get_conversation`. + +**Creation:** `gen_create_video` (single clip; models: seedance-2.0, veo_3, kling_2_1, sora_2, grok, pika), `gen_create_image` (nano-banana-pro/nano-banana/nano-banana-2), `gen_create_song` (suno-v5-beta/suno-v4.5plus-beta), `gen_create_song_mix`, `gen_render_video`, `gen_generate_content` (trigger generation for a vidsheet cell), `gen_generate_layer` (trigger generation for a specific layer), `gen_continue_generation` (resume a stopped generation). + +**Assets / Content Resources:** `gen_list_assets` / `gen_list_content_resources`, `gen_get_asset` / `gen_get_content_resource`, `gen_import_asset_from_url`, `gen_create_direct_upload` (get pre-signed S3 URL → PUT file → `gen_complete_asset_upload`), `gen_create_content_resource`, `gen_update_content_resource`, `gen_delete_asset` / `gen_delete_content_resource`. + +**Voices:** `gen_list_agent_voices`, `gen_list_my_voices`, `gen_design_voice`, `gen_clone_voice`, `gen_preview_voice` (TTS audition), `gen_get_voice_preview_status`, `gen_generate_voice_description`, `gen_generate_voice_samples`, `gen_get_voice_sample_status`, `gen_delete_voice`. -**Natural-language delegation (start here for fuzzy goals):** `gen_ask` (questions about social data — links, accounts, hashtags, trends), `gen_chat` (open-ended build goals), `gen_research` (topic research across social + web), `gen_make_video` (finished multi-scene video from a brief), `gen_generate_content_ideas`. +**Social publishing:** `gen_get_social_connect_url` (OAuth connect flow), `gen_list_connected_socials`, `gen_schedule_post` (platforms: tiktok|instagram|facebook|youtube|x), `gen_list_scheduled_posts`, `gen_get_post_status`, `gen_update_scheduled_post`, `gen_delete_scheduled_post`, `gen_disconnect_social`, `gen_publish_content` (direct publish/schedule to TikTok). On **X**, `gen_schedule_post` also supports up to 4 images per tweet (`media_urls`), **threads** (`thread`: an ordered list of `{text, media_urls?}` segments), and **replies** (`reply_to_tweet_id`). `thread` and `reply_to_tweet_id` are X-only. -**Creation:** `gen_create_video` (single clip; models: seedance-2.0, veo_3, kling_2_1, sora_2, grok, pika), `gen_create_image` (nano-banana-pro/nano-banana/nano-banana-2), `gen_create_song` (suno-v5-beta/suno-v4.5plus-beta), `gen_create_song_mix`, `gen_render_video`. +**Vidsheets:** `gen_list_templates`, `gen_clone_template`, `gen_create_engine`, `gen_get_engine`, `gen_clone_engine`, `gen_list_columns`, `gen_create_column`, `gen_update_column`, `gen_delete_column`, `gen_list_rows`, `gen_create_row`, `gen_duplicate_row`, `gen_get_cell`, `gen_update_cell`, `gen_create_layer`, `gen_get_layer`, `gen_update_layer`, `gen_delete_layer`, `gen_list_variables`, `gen_create_variable`, `gen_update_variable`, `gen_delete_variable`. -**Assets:** `gen_list_assets`, `gen_get_asset`, `gen_import_asset_from_url`, `gen_upload_asset`, `gen_complete_asset_upload`, `gen_delete_asset`. +**Watchlists:** `gen_create_watchlist`, `gen_list_watchlists`, `gen_get_watchlist`, `gen_update_watchlist`, `gen_delete_watchlist`, `gen_query_watchlist`, `gen_add_watchlist_source`, `gen_remove_watchlist_source`, `gen_pause_watchlist`, `gen_resume_watchlist`. -**Voices:** `gen_list_voices`, `gen_list_my_voices`, `gen_design_voice`, `gen_clone_voice`, `gen_create_voice`. +**Content monitoring:** `gen_create_monitoring_job` (scrape TikTok/Instagram/YouTube into agent knowledge), `gen_update_monitoring_job`. -**Social publishing:** `gen_get_social_connect_url` (OAuth connect flow), `gen_list_connected_socials`, `gen_schedule_post` (platforms: tiktok|instagram|facebook|youtube|x), `gen_list_scheduled_posts`, `gen_get_post_status`, `gen_update_scheduled_post`, `gen_delete_scheduled_post`, `gen_disconnect_social`. On **X**, `gen_schedule_post` also supports up to 4 images per tweet (`media_urls`), **threads** (`thread`: an ordered list of `{text, media_urls?}` segments), and **replies** (`reply_to_tweet_id`). `thread` and `reply_to_tweet_id` are X-only. +**Proof of Genesis backups:** `gen_list_proof_of_genesis_backups`, `gen_create_proof_of_genesis_backup`, `gen_remove_proof_of_genesis_backup`. -**Vidsheets:** `gen_list_templates`, `gen_clone_template`, `gen_create_engine`, `gen_get_engine`, `gen_clone_engine`, `gen_list_columns`, `gen_create_column`, `gen_list_rows`, `gen_create_row`, `gen_get_cell`, `gen_update_cell`, `gen_create_variable`, `gen_update_variable`, `gen_delete_variable`. +**Recurring automation:** `gen_create_recurring_job`, `gen_list_recurring_jobs`, `gen_get_recurring_job`, `gen_update_recurring_job`, `gen_run_recurring_job_now`, `gen_pause_recurring_job`, `gen_resume_recurring_job`, `gen_delete_recurring_job`, `gen_ensure_default_recurring_job` (idempotent daily-ideas setup). -**Watchlists:** `gen_create_watchlist`, `gen_list_watchlists`, `gen_query_watchlist`, `gen_add_watchlist_source`, `gen_remove_watchlist_source`. +**Credits/billing:** `gen_get_credit_balance`, `gen_estimate_job`, `gen_get_credit_usage`, `gen_list_credit_plans`, `gen_buy_credits`, `gen_upgrade_workspace`. -**Recurring automation:** `gen_create_recurring_job`, `gen_list_recurring_jobs`, `gen_run_recurring_job_now`, `gen_pause_recurring_job`, `gen_resume_recurring_job`. +**Agent setup:** `gen_get_me`, `gen_list_agents`, `gen_get_agent`, `gen_create_agent`, `gen_update_agent`, `gen_delete_agent`, `gen_get_agent_core`, `gen_update_agent_core`, `gen_get_agent_profile`, `gen_create_agent_profile`, `gen_update_agent_profile`, `gen_reset_agent_profile`, `gen_set_agent_primary_photo`, `gen_add_agent_look`, `gen_add_agent_account`, `gen_add_agent_inspiration`, `gen_connect_agent_elevenlabs`, `gen_list_agent_avatars`, `gen_create_agent_avatar`, `gen_delete_agent_avatar`. -**Credits/billing:** `gen_get_credit_balance`, `gen_estimate_job`, `gen_buy_credits`, `gen_upgrade_workspace`. +**Organizations:** `gen_list_organizations`, `gen_create_organization`, `gen_get_organization`, `gen_update_organization`, `gen_delete_organization`. -**Agent setup:** `gen_get_me`, `gen_list_agents`, `gen_get_agent_core`, `gen_update_agent_core`, `gen_set_agent_primary_photo`, `gen_add_agent_look`. +**API keys:** `gen_list_api_keys`, `gen_create_api_key`, `gen_update_api_key`, `gen_revoke_api_key`, `gen_revoke_all_api_keys`. -**Job control:** `gen_get_generation` (poll), `gen_stop_generation` (refunds credits), `gen_get_run_status`. +**Job control:** `gen_get_generation` (poll), `gen_stop_generation` (refunds credits), `gen_continue_generation` (resume), `gen_get_run_status`. Full install guide: https://api.gen.pro/guides/mcp/ diff --git a/public/openapi.yaml b/public/openapi.yaml index ac4757f..4c804cd 100644 --- a/public/openapi.yaml +++ b/public/openapi.yaml @@ -59,6 +59,8 @@ servers: description: Agent Chat API - url: https://agent-core.gen.pro/v1 description: Agent Core API (watchlists) + - url: https://python.gen.pro + description: Social publishing + OAuth integration service (schedule, social connect) security: - apiKey: [] @@ -125,6 +127,13 @@ tags: agent. Base URL `https://agent-core.gen.pro/v1`. Scraped data feeds back into agent chat and content idea generation. CRUD operations are free; downstream scrapes bill normally. + - name: Billing + description: | + Credit balance, usage history, plan discovery, and purchase flows. All on `https://api.gen.pro/v1`. + All endpoints that consume credits are marked `x-phase: export` and documented with a credit note. + - name: Voices + description: | + Voice library, custom voice CRUD, and voice-design status polling. Base URL `https://api.gen.pro/v1`. - name: Recurring Jobs description: | Scheduled agent runs ("daily tasks"). Base URL @@ -965,6 +974,49 @@ paths: schema: $ref: '#/components/schemas/Column' + /vidsheet/{sheet_id}/columns/{column_id}: + patch: + operationId: updateColumn + x-phase: edit + summary: Update a column + description: Update a column's title, type, or position. Only ingredient-role columns can be modified. + tags: [Columns] + parameters: + - $ref: '#/components/parameters/AgentId' + - $ref: '#/components/parameters/SheetId' + - name: column_id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + properties: + spreadsheet_column: + type: object + properties: + title: + type: string + type: + type: string + enum: [text, image, video, audio] + position: + type: integer + responses: + '200': + description: Column updated + content: + application/json: + schema: + $ref: '#/components/schemas/Column' + '403': + description: Forbidden — cannot modify system-role columns + '422': + description: Validation error + /vidsheet/{sheet_id}/columns/{column_id}/duplicate: post: operationId: duplicateColumn @@ -3401,6 +3453,35 @@ paths: application/json: schema: { $ref: '#/components/schemas/Error' } + /agents/{agent_id}/core/inspiration: + post: + operationId: addAgentInspiration + x-phase: setup + summary: Add one inspiration source to the agent + description: Adds a single inspiration source URL to the agent's existing inspiration list. Does not replace the full list. Use PATCH /agents/{agent_id}/core with the full `inspiration` array to replace. + tags: [Agent Core] + parameters: + - { name: agent_id, in: path, required: true, schema: { type: string } } + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [url] + properties: + url: + type: string + description: Full URL of the inspiration source + platform: + type: string + description: Platform hint (e.g. tiktok, instagram, youtube) + responses: + '200': + description: Inspiration source added + '422': + description: Validation error + # ── Agent Voice ─────────────────────────────────────────── /agents/{agent_id}/proof-of-genesis/backups: get: @@ -4152,6 +4233,460 @@ paths: application/json: schema: { $ref: '#/components/schemas/RecurringJob' } + /agents/{agent_id}/recurring-jobs/{job_id}/test-run: + post: + operationId: runRecurringJobNow + x-phase: monitoring + summary: Trigger a recurring job immediately (test run) + tags: [Recurring Jobs] + servers: + - url: https://agent.gen.pro/v1 + parameters: + - { name: agent_id, in: path, required: true, schema: { type: string } } + - { name: job_id, in: path, required: true, schema: { type: string } } + responses: + '202': + description: Run accepted + content: + application/json: + schema: + type: object + properties: + run_id: { type: string } + + /credit_balance: + get: + operationId: getCreditBalance + x-phase: export + summary: Get workspace credit balance + tags: [Billing] + parameters: + - { name: agent_id, in: query, required: true, schema: { type: string } } + responses: + '200': + description: Credit balance + content: + application/json: + schema: + type: object + properties: + available_credit: { type: number } + generic: { type: number } + aura: { type: number } + + /credit_plans: + get: + operationId: listCreditPlans + x-phase: export + summary: List available credit and subscription plans + tags: [Billing] + parameters: + - { name: cycle, in: query, schema: { type: string, enum: [monthly, annual] } } + responses: + '200': + description: Credit plans + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: { type: string } + name: { type: string } + price: { type: number } + credits: { type: number } + cycle: { type: string } + + /credit_transactions: + get: + operationId: getCreditUsage + x-phase: export + summary: List credit usage history + tags: [Billing] + parameters: + - { name: agent_id, in: query, required: true, schema: { type: string } } + - { name: page, in: query, schema: { type: integer } } + responses: + '200': + description: Credit transactions + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: { type: string } + amount: { type: number } + description: { type: string } + created_at: { type: string, format: date-time } + + /payment: + post: + operationId: buyCredits + x-phase: export + summary: Start a Stripe credit purchase checkout session + tags: [Billing] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [credit_plan_id, organization_id] + properties: + credit_plan_id: { type: string } + organization_id: { type: string } + success_url: { type: string } + cancel_url: { type: string } + responses: + '200': + description: Checkout session with payment URL + content: + application/json: + schema: + type: object + properties: + url: { type: string } + + /subscription_upgrade: + post: + operationId: upgradeWorkspace + x-phase: export + summary: Upgrade workspace subscription tier + tags: [Billing] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [creditPlanId, organizationId, returnUrl] + properties: + creditPlanId: { type: string } + organizationId: { type: string } + returnUrl: { type: string } + responses: + '200': + description: Checkout session + content: + application/json: + schema: + type: object + properties: + url: { type: string } + + /user_jobs/estimate: + post: + operationId: estimateJob + x-phase: edit + summary: Estimate credit cost for one or more generation jobs + tags: [Billing] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id, user_jobs] + properties: + agent_id: { type: string } + user_jobs: + type: array + items: { type: object } + responses: + '200': + description: Cost estimate + content: + application/json: + schema: + type: object + properties: + total_credits: { type: number } + breakdown: { type: array, items: { type: object } } + + /user_voice_resources: + get: + operationId: listMyVoices + x-phase: setup + summary: List the agent's custom voices + tags: [Voices] + parameters: + - { name: agent_id, in: query, required: true, schema: { type: string } } + responses: + '200': + description: Custom voices + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: { type: string } + name: { type: string } + source: { type: string } + + /hume_ai_sample/status: + get: + operationId: getVoiceSampleStatus + x-phase: setup + summary: Poll voice design sample status + tags: [Voices] + parameters: + - { name: agent_id, in: query, required: true, schema: { type: string } } + - { name: generation_id, in: query, required: true, schema: { type: string } } + responses: + '200': + description: Sample status and audio + content: + application/json: + schema: + type: object + properties: + status: { type: string, enum: [pending, completed, failed] } + base64_audio: { type: string } + speaker_embedding_url: { type: string } + + /content_resources/from_url: + post: + operationId: importAssetFromUrl + x-phase: edit + summary: Import media from a public URL into the asset library + tags: [Content Resources] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id, url] + properties: + agent_id: { type: string } + url: { type: string, description: "Public URL (YouTube, TikTok, Instagram, or direct file)" } + folder_id: { type: string } + responses: + '200': + description: Import job started + content: + application/json: + schema: + type: object + properties: + id: { type: string } + status: { type: string } + + /schedule/posts: + get: + operationId: listScheduledPosts + x-phase: export + summary: List the content calendar (scheduled posts) + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: agent_id, in: query, required: true, schema: { type: string } } + - { name: start_date, in: query, schema: { type: string, format: date } } + - { name: end_date, in: query, schema: { type: string, format: date } } + responses: + '200': + description: Scheduled posts + content: + application/json: + schema: + type: object + properties: + scheduled_posts: + type: array + items: + type: object + + /schedule/with-post: + post: + operationId: schedulePost + x-phase: export + summary: Create or schedule a social media post + tags: [Publishing] + servers: + - url: https://python.gen.pro + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id, platform, schedule_type] + properties: + agent_id: { type: string } + platform: + type: array + items: { type: string, enum: [tiktok, instagram, facebook, youtube, x] } + description: { type: string } + media_url: { type: string } + media_urls: { type: array, items: { type: string } } + schedule_type: { type: string, enum: [now, specific_time] } + scheduled_time: { type: string, format: date-time } + title: { type: string } + media_type: { type: string, enum: [VIDEO, IMAGE, TWEET_VIDEO] } + thumbnail_url: { type: string } + thread: + type: array + items: + type: object + properties: + text: { type: string } + media_urls: { type: array, items: { type: string } } + reply_to_tweet_id: { type: string } + responses: + '200': + description: Scheduled post created + content: + application/json: + schema: + type: object + properties: + id: { type: string } + status: { type: string } + + /schedule/post/{post_id}: + get: + operationId: getPostStatus + x-phase: export + summary: Get platform-confirmed publish status of a post + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: post_id, in: path, required: true, schema: { type: string } } + responses: + '200': + description: Post status + content: + application/json: + schema: + type: object + properties: + status: { type: string, enum: [accepted, publishing, published, failed] } + platforms: + type: array + items: + type: object + properties: + platform: { type: string } + status: { type: string } + platform_post_id: { type: string } + post_url: { type: string } + published_at: { type: string, format: date-time } + error: { type: string } + patch: + operationId: updateScheduledPost + x-phase: export + summary: Update a scheduled post before it publishes + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: post_id, in: path, required: true, schema: { type: string } } + requestBody: + required: true + content: + application/json: + schema: { type: object, additionalProperties: true } + responses: + '200': + description: Updated post + delete: + operationId: deleteScheduledPost + x-phase: export + summary: Delete a scheduled post from the calendar + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: post_id, in: path, required: true, schema: { type: string } } + responses: + '204': + description: Deleted + + /platform/get_oauth_account: + post: + operationId: listConnectedSocials + x-phase: export + summary: List connected social accounts for publishing + tags: [Publishing] + servers: + - url: https://python.gen.pro + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id] + properties: + agent_id: { type: string } + responses: + '200': + description: Connected platforms + content: + application/json: + schema: + type: object + additionalProperties: true + + /platform/get_authorization_url: + post: + operationId: getSocialConnectUrl + x-phase: export + summary: Get OAuth URL to connect a social account + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: platform, in: query, required: true, schema: { type: string, enum: [tiktok, instagram, facebook, youtube, x] } } + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id] + properties: + agent_id: { type: string } + responses: + '200': + description: OAuth URL + content: + application/json: + schema: + type: object + properties: + url: { type: string } + + /platform/disconnect/{platform}: + put: + operationId: disconnectSocial + x-phase: export + summary: Disconnect a connected social account + tags: [Publishing] + servers: + - url: https://python.gen.pro + parameters: + - { name: platform, in: path, required: true, schema: { type: string, enum: [tiktok, instagram, facebook, youtube, x] } } + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [agent_id] + properties: + agent_id: { type: string } + responses: + '200': + description: Disconnected + components: securitySchemes: apiKey: diff --git a/src/content/docs/reference/cards/video-from-image.mdx b/src/content/docs/reference/cards/video-from-image.mdx index b16e404..29242d6 100644 --- a/src/content/docs/reference/cards/video-from-image.mdx +++ b/src/content/docs/reference/cards/video-from-image.mdx @@ -44,6 +44,7 @@ POST /v1/vidsheet/{id}/cells/{cell_id}/generate?agent_id={agent_id} | Seedance Lite | `video_from_image` | `"seedance_lite"` | | Seedance Pro | `video_from_image` | `"seedance_pro"` | | Seedance Pro 1.5 | `video_from_image` | `"seedance_pro_1_5"` | +| Seedance 2.0 | `video_from_image` | `"seedance-2.0"` | | Grok | `video_from_image` | `"grok"` | --- diff --git a/src/content/docs/reference/cards/video-from-text.mdx b/src/content/docs/reference/cards/video-from-text.mdx index d65bd83..242af38 100644 --- a/src/content/docs/reference/cards/video-from-text.mdx +++ b/src/content/docs/reference/cards/video-from-text.mdx @@ -44,6 +44,7 @@ POST /v1/vidsheet/{id}/cells/{cell_id}/generate?agent_id={agent_id} | Kling 1.6 | `video_from_text` | `"kling_1_6"` | | Seedance Pro | `video_from_text` | `"seedance_pro"` | | Seedance Pro 1.5 | `video_from_text` | `"seedance_pro_1_5"` | +| Seedance 2.0 | `video_from_text` | `"seedance-2.0"` | | Grok | `video_from_text` | `"grok"` | --- @@ -55,7 +56,7 @@ POST /v1/vidsheet/{id}/cells/{cell_id}/generate?agent_id={agent_id} | `generation_type` | string | Yes | `"video_from_text"`. | | `data.prompt` | string | Yes | Text description of the video to generate. Supports `{{variable_name}}` syntax. | | `data.negative_prompt` | string | No | What to avoid in the generated video. | -| `data.model` | string | No | Model variant. See [Models](#models) table. | +| `data.model` | string | No | Model variant — one of `"veo_3"`, `"veo_3_fast"`, `"veo_3_1"`, `"veo_3_1_fast"`, `"sora_2"`, `"kling_1_6"`, `"seedance_pro"`, `"seedance_pro_1_5"`, `"seedance-2.0"`, `"grok"`. See [Models](#models) table. | | `data.aspect_ratio` | string | No | `"1:1"`, `"9:16"`, or `"16:9"`. Grok also supports `"4:3"`, `"3:4"`, `"3:2"`, and `"2:3"`. | | `data.resolution` | string | No | Output resolution. Use `"1080p"` or `"720p"` when supported by the selected model. If omitted, the API uses the cell default or the closest supported model default. | | `data.duration` | integer | No | Video duration in seconds. | diff --git a/src/content/docs/reference/columns.mdx b/src/content/docs/reference/columns.mdx index 61ab981..e0c5875 100644 --- a/src/content/docs/reference/columns.mdx +++ b/src/content/docs/reference/columns.mdx @@ -123,6 +123,46 @@ curl -X POST "https://api.gen.pro/v1/vidsheet/101/columns?agent_id=42" \ --- +## Update column + +Update a column's title, type, or position. Only `ingredient`-role columns can be updated. + +``` +PATCH /v1/vidsheet/{id}/columns/{col_id}?agent_id={agent_id} +``` + +### Request body + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| `spreadsheet_column.title` | string | No | New column name. | +| `spreadsheet_column.type` | string | No | New content type: `text`, `image`, `video`, or `audio`. | +| `spreadsheet_column.position` | integer | No | New zero-indexed position. | + +Send only the fields you want to change. + +### Response (200) + +Returns the updated column. + +### Errors + +| Status | Code | Description | +|--------|------|-------------| +| `403` | `forbidden` | Column is a system role and cannot be modified. | +| `422` | `validation_error` | Invalid type or missing required field. | + +### Example + +```bash +curl -X PATCH "https://api.gen.pro/v1/vidsheet/101/columns/200?agent_id=42" \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{"spreadsheet_column": {"title": "Voiceover Script", "position": 0}}' +``` + +--- + ## Duplicate column Creates a copy of a column and all its cell values. diff --git a/src/content/docs/reference/content-monitoring.mdx b/src/content/docs/reference/content-monitoring.mdx index 06d75e0..430b589 100644 --- a/src/content/docs/reference/content-monitoring.mdx +++ b/src/content/docs/reference/content-monitoring.mdx @@ -30,14 +30,9 @@ Not all platforms support all search types: | Instagram | Yes | Yes | No | | YouTube | Yes | Yes | Yes | -## Pricing - -| Item | Cost | -|------|------| -| Per video/post scraped | $0.015 | -| Per comment (when comment monitoring is enabled) | $0.002 | - -Costs are converted to credits using the standard credit formula. + --- diff --git a/src/content/docs/reference/content-resources.mdx b/src/content/docs/reference/content-resources.mdx index d6cf794..5e7ee56 100644 --- a/src/content/docs/reference/content-resources.mdx +++ b/src/content/docs/reference/content-resources.mdx @@ -5,7 +5,7 @@ description: Upload, organize, and manage files — images, videos, audio, and f import { Aside } from '@astrojs/starlight/components'; -Content resources represent files in your agent's workspace — generated outputs (images, videos, audio) and manually uploaded assets. The asset library provides a unified view with folder organization, and direct upload lets you send files straight to S3 for maximum performance. +Content resources represent files in your agent's workspace — generated outputs (images, videos, audio) and manually uploaded assets. The asset library provides a unified view with folder organization, and direct upload lets you send files straight from your client for maximum performance.