Inspect direct SuperAgent run
/api/brands/{brandId}/agents/superagent/direct-runs/{runId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| runId | path | Yes | Direct SuperAgent run ID. |
curl "https://www.riverflow.ai/api/riverflow-api/me" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": {
"team_id": "75b0fad9-1392-4a56-8ac0-bac2c0dd6d53",
"team_name": "Demo Team",
"api_key": {
"api_key_id": "2c35db1a-2c78-49fb-b4cf-f0182f178ea0",
"name": "Production key",
"key_prefix": "rfk_live",
"key_last_four": "1b78",
"scopes": [
"photoshoot:generate",
"freestyle:generate",
"skills:read",
"skills:write",
"brands:read",
"projects:read",
"projects:write",
"characters:write",
"references:write",
"products:read",
"products:write",
"personas:read",
"personas:write",
"assets:upload",
"assets:read",
"assets:manage",
"folders:read",
"photoshoot:read",
"scenes:read",
"scenes:write",
"style-rules:read",
"style-rules:write",
"images:edit",
"images:enhance",
"images:upscale",
"shots:generate",
"shots:upscale",
"videos:generate",
"videos:read",
"audio:generate",
"audio:read",
"batch:estimate",
"batch:submit",
"batch:status",
"batch:retry",
"batch:approve",
"ads:generate",
"ads:read",
"ads:approve",
"tts:products",
"tts:shops",
"credits:read",
"wallet:read"
],
"service_actor_user_id": "ab9c049f-468a-4465-b9a5-3f2919c77314",
"created_at": "2026-05-29T09:00:00.000Z",
"expires_at": null,
"last_used_at": "2026-05-29T09:05:00.000Z"
}
},
"error": null
}curl "https://www.riverflow.ai/api/teams/$TEAM_ID/brands" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": [
{
"brand_id": "b4e4b52b-0a46-4f31-9089-21c0f8df4a42",
"team_id": "75b0fad9-1392-4a56-8ac0-bac2c0dd6d53",
"brand_name": "Demo Brand",
"brand_website_url": "https://example.com",
"visibility": "open",
"role": "admin",
"has_access_via_open": true,
"is_complete": true,
"logo": null,
"created_at": "2026-05-29T09:00:00.000Z",
"updated_at": "2026-05-29T09:00:00.000Z"
}
],
"error": null
}curl "https://www.riverflow.ai/api/brands/$BRAND_ID/products?limit=40&include_product_images=true" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": {
"products": [
{
"product_id": "8d7fd451-01f7-4d89-a7ac-e857d78d78c2",
"product_name": "Demo Product",
"product_thumbnail_asset_id": "asset-thumbnail-1",
"product_thumbnail_image_url": "https://cdn.example.com/product.png",
"product_description": "A reusable demo product for API photoshoot generation.",
"product_visual_cues": [
"matte label",
"white bottle"
],
"product_images": [
{
"product_image_id": "ae64a154-4371-46d1-bc80-716f23208db2",
"asset_id": "a7cbec64-e830-48f1-822b-83f7c03358f8",
"image_url": "https://cdn.example.com/product.png",
"is_primary": true
}
],
"product_source": "user_upload",
"source_sku_id": null,
"source_product_url": null,
"source_metadata": null,
"tts_link_status": null,
"tts_product_status": null,
"tts_live": false
}
],
"pagination": {
"offset": 0,
"limit": 40,
"total_count": 1,
"has_more": false,
"next_offset": null
}
},
"error": null
}curl -X POST "https://www.riverflow.ai/api/scenes/search" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"brand_id":"'$BRAND_ID'","query":"studio product scene","limit":5}'{
"data": {
"scenes": [
{
"scene_id": "f6a0c8fa-6fd9-4a77-9d43-9117522bf1f9",
"scene_title": "Studio plinth",
"scene_tags": [
"studio",
"plinth"
],
"scene_type": "product",
"product_category": null,
"main_image_url": "https://cdn.example.com/scene.png",
"example_image_urls": [],
"is_public": true,
"source": "public_library",
"author_name": null,
"created_at": "2026-05-29T09:00:00.000Z",
"status": "completed",
"error": null
}
],
"similarity_scores": [
0.91
],
"offset": 0,
"limit": 5,
"total": 1,
"brand_owned_scene_count": 0
},
"error": null
}curl "https://www.riverflow.ai/api/brands/$BRAND_ID/style-rules?limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": {
"style_rules": [
{
"style_rule_id": "276fe31c-3633-43d4-8635-426ed51ce62e",
"brand_id": "b4e4b52b-0a46-4f31-9089-21c0f8df4a42",
"public_source_style_rule_id": null,
"title": "Clean studio light",
"rule_text": "Keep the background minimal and product labels legible.",
"thumbnail_image_url": null,
"reference_image_urls": null,
"colours": [],
"created_at": "2026-05-29T09:00:00.000Z",
"updated_at": "2026-05-29T09:00:00.000Z"
}
],
"total": 1,
"offset": 0,
"limit": 25
},
"error": null
}curl -X POST "https://www.riverflow.ai/api/photoshoot/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-generate-001" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "'$BRAND_ID'",
"product_image_ids": ["'$PRODUCT_IMAGE_ID'"],
"character_ids": ["'$CHARACTER_ID'"],
"reference_ids": ["'$REFERENCE_ID'"],
"reference_asset_ids": ["'$ASSET_ID'"],
"scene_id": "'$SCENE_ID'",
"aspect_ratio": "1:1",
"user_prompt": "",
"generation_model": "auto",
"style_rule_id": null,
"project_id": null
}'{
"data": {
"generation": {
"generation_id": "38f93248-7aa8-4268-ae43-7147b12989ed",
"project_id": null,
"product_image_ids": [
"ae64a154-4371-46d1-bc80-716f23208db2"
],
"character_ids": [
"bd25a626-5926-4dc8-b7fb-b5b31e203a69"
],
"reference_ids": [
"6f5d8c93-52d0-40df-b1ef-98ad94b2875d"
],
"reference_asset_ids": [
"a7cbec64-e830-48f1-822b-83f7c03358f8"
],
"scene_id": "f6a0c8fa-6fd9-4a77-9d43-9117522bf1f9",
"aspect_ratio": "1:1",
"image_path": null,
"image_url": null,
"prompt": null,
"user_prompt": "",
"generation_model": "auto",
"style_rule_id": null,
"request_id": null,
"confidence_score": null,
"scoring_json": null,
"generation_time_seconds": null,
"approval": null,
"status": "queued",
"can_retry": true,
"created_at": "2026-05-29T09:00:00.000Z",
"adaptation_summary": null
},
"billing": {
"usage_event_id": "bca51fd7-7111-41ba-8480-88c1c8428e9a",
"pricing_version": "photoshoot_generate_v1",
"unit": "generated_2k_output_count",
"quantity": 1,
"credits_required": 10,
"billing_status": "debited"
},
"idempotency": {
"key": "manual-generate-001",
"status": "accepted",
"replayed": false
}
},
"error": null
}curl "https://www.riverflow.ai/api/photoshoot/generate/$GENERATION_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": {
"generation": {
"generation_id": "38f93248-7aa8-4268-ae43-7147b12989ed",
"product_image_ids": [
"ae64a154-4371-46d1-bc80-716f23208db2"
],
"scene_id": "f6a0c8fa-6fd9-4a77-9d43-9117522bf1f9",
"aspect_ratio": "1:1",
"image_path": null,
"image_url": null,
"user_prompt": "",
"confidence_score": null,
"status": "processing",
"can_retry": true,
"created_at": "2026-05-29T09:00:00.000Z"
},
"billing": {
"usage_event_id": "bca51fd7-7111-41ba-8480-88c1c8428e9a",
"pricing_version": "photoshoot_generate_v1",
"unit": "generated_2k_output_count",
"quantity": 1,
"credits_required": 10,
"billing_status": "debited",
"refund_transaction_id": null
}
},
"error": null
}curl -X POST "https://www.riverflow.ai/api/videos/design/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-video-001" \
-H "Content-Type: application/json" \
-d '{
"brandId": "'$BRAND_ID'",
"mode": "t2v",
"modelVersion": "kling-o3-pro",
"prompt": "Create a smooth product hero video.",
"settings": {
"resolution": "720p",
"ratio": "16:9",
"durationSec": 6
}
}'{
"data": {
"jobId": "5b4c3a28-f30c-4c4e-92b6-3a35d857e676",
"status": "pending",
"warnings": [],
"billing": {
"usage_event_id": "bca51fd7-7111-41ba-8480-88c1c8428e9a",
"pricing_version": "video_generate_v1",
"unit": "generated_video_output_count",
"quantity": 1,
"credits_required": 50,
"billing_status": "debited",
"refund_transaction_id": null
},
"idempotency": {
"key": "manual-video-001",
"status": "accepted",
"replayed": false
}
},
"error": null
}curl "https://www.riverflow.ai/api/teams/$TEAM_ID/credits/billing-summary" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"{
"data": {
"team_id": "75b0fad9-1392-4a56-8ac0-bac2c0dd6d53",
"billing_mode": "api_app_credits",
"api_mcp_charge_mode": "billable",
"app_credit_billing_enabled": true,
"credits_balance": 215,
"bonus_balance": 100,
"api_mcp_eligible_balance": 215,
"total_app_balance": 215,
"excluded_bonus_balance": 0,
"allowance_balance": 40,
"paid_topup_balance": 75,
"next_paid_topup_expiry_at": "2027-06-01T10:00:00.000Z",
"next_bonus_expiry_at": "2026-07-15T10:00:00.000Z",
"topup_currency": "USD",
"topup_minimum_amount": 15,
"topup_maximum_amount": 999999,
"topup_amount_step": 1,
"topup_expiry_days": 365,
"topup_quote_presets": [
{
"amount": 15,
"unit_amount": 1500,
"amount_cents": 1500,
"purchased_credits": 865,
"currency": "usd",
"selected_currency": "USD"
}
],
"topup_url": "/app/credits/topups",
"can_manage_billing": true,
"upgrade_eligible": true,
"team_credit_plan": "STARTER",
"team_plan_source": "stripe_managed",
"self_serve_manageable": true,
"auto_billing": {
"eligible": true,
"eligibility_reason": "eligible",
"can_manage_billing": true,
"enabled": true,
"status": "enabled",
"threshold_amount": 10,
"threshold_amount_cents": 1000,
"refill_amount": 15,
"refill_amount_cents": 1500,
"refill_quote": {
"amount": 15,
"unit_amount": 1500,
"amount_cents": 1500,
"purchased_credits": 865,
"currency": "usd",
"selected_currency": "USD"
},
"currency": "usd",
"period_spend_cap_amount": 150,
"period_spend_cap_cents": 15000,
"period_spent_amount": 45,
"period_spent_cents": 4500,
"billing_period_start": "2026-06-01T10:00:00.000Z",
"billing_period_end": "2026-07-01T10:00:00.000Z",
"last_triggered_at": "2026-06-12T08:30:00.000Z",
"last_succeeded_at": "2026-06-12T08:31:00.000Z",
"last_failed_at": null
}
},
"error": null
}Riverflow-Key <api_key><api_key>photoshoot:generatefreestyle:generateskills:readskills:writebrands:readprojects:readprojects:writecharacters:writereferences:writeproducts:readproducts:writepersonas:readpersonas:writeassets:uploadassets:readassets:managefolders:readphotoshoot:readscenes:readscenes:writestyle-rules:readstyle-rules:writeimages:editimages:enhanceimages:upscaleshots:generateshots:upscalevideos:generatevideos:readaudio:generateaudio:readbatch:estimatebatch:submitbatch:statusbatch:retrybatch:approveads:generateads:readads:approvetts:productstts:shopscredits:readwallet:read{
"data": null,
"error": {
"message": "Riverflow API key required",
"code": "optional_machine_code"
}
}400
401
403
404
409
422
500
/api/brands/{brandId}/agents/superagent/direct-runs/{runId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| runId | path | Yes | Direct SuperAgent run ID. |
/api/brands/{brandId}/assets/media/{assetId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetId | path | Yes | Canonical asset ID. |
/api/brands/{brandId}/mcp-upload-intents| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| Idempotency-Key | header | Yes | Required stable key for replay-safe Riverflow API-key upload-intent requests. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/mcp-upload-intents" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-mcp-upload-001" \
-H "Content-Type: application/json" \
-d '{"upload_kind":"generic_image","original_file_name":"chat-upload.webp"}'/api/brands/{brandId}/mcp-upload-intents/{uploadIntentId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| uploadIntentId | path | Yes | Riverflow MCP upload intent ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/mcp-upload-intents/$UPLOAD_INTENT_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/user-uploads/upload-session| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/user-uploads/upload-session" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"original_file_name":"reference.webp","mime_type":"image/webp","file_size_bytes":524288}'/api/brands/{brandId}/user-uploads/finalize| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/user-uploads/finalize" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"storage_path":"'$STORAGE_PATH'","upload_session_id":"'$UPLOAD_SESSION_ID'"}'/api/brands/{brandId}/user-uploads| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
| asset_types | query | No | Comma-separated asset types. |
| project_id | query | No | Filter to assets assigned to a project. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/user-uploads?asset_types=image&limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/user-uploads/filter-options| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| asset_types | query | No | Comma-separated asset types. |
| filename_query | query | No | Filename search text used to scope facet counts. |
| project_id | query | No | Project filter used to scope facet counts. |
| include_brand_wide_project_assets | query | No | When project_id is supplied, also include brand-wide uploads. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/user-uploads/filter-options?asset_types=image" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/brand-assets| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/brand-assets" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/folders| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based result offset. Defaults to 0 for API and MCP clients. |
| limit | query | No | Maximum results to return. Defaults to 100 and cannot exceed 100. |
| asset_id | query | No | Marks whether each folder already contains this canonical asset ID. |
| project_id | query | No | Filters folders to an active project scope. |
| include_brand_wide_project_assets | query | No | Includes eligible brand-wide folder assets when filtering by project. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/folders?limit=100" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/folders| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/folders" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Summer campaign","items":[{"asset_id":"'$ASSET_ID'"}]}'/api/brands/{brandId}/folders/{folderId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| folderId | path | Yes | Riverflow asset folder ID. |
| offset | query | No | Zero-based result offset. Defaults to 0 for API and MCP clients. |
| limit | query | No | Maximum results to return. Defaults to 100 and cannot exceed 100. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/folders/$FOLDER_ID?limit=100" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/folders/{folderId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| folderId | path | Yes | Riverflow asset folder ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/folders/$FOLDER_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Approved summer campaign"}'/api/brands/{brandId}/folders/{folderId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| folderId | path | Yes | Riverflow asset folder ID. |
curl -X DELETE "https://www.riverflow.ai/api/brands/$BRAND_ID/folders/$FOLDER_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/folders/{folderId}/items| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| folderId | path | Yes | Riverflow asset folder ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/folders/$FOLDER_ID/items" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"asset_id":"'$ASSET_ID'"}]}'/api/brands/{brandId}/folders/{folderId}/items| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| folderId | path | Yes | Riverflow asset folder ID. |
curl -X DELETE "https://www.riverflow.ai/api/brands/$BRAND_ID/folders/$FOLDER_ID/items" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"asset_id":"'$ASSET_ID'"}]}'/api/brands/{brandId}/assets/review-counts| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| filters | query | No | URL-encoded JSON object using camelCase fields: projectId, assetType, mediaType, workspaceKind, liked, disliked, unreviewed, searchQuery, authorIds, productIds, includeNoProduct, aspectRatios, resolutions, statuses, includeBrandWideProjectAssets, includeEditorGenerated and includeEditorAssets. Omitted review flags include that state. Resolutions accepts 1K, 2K, 4K or other. Pagination and sort fields are not accepted. |
/api/brands/{brandId}/assets/v2| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
| asset_type | query | No | Filter by asset family. |
| workspace_kind | query | No | Filter by workspace lineage. |
| project_id | query | No | Filter to assets assigned to a project. |
| statuses | query | No | Comma-separated generation statuses. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/v2?asset_type=generation&limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/photoshoots| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
| sort_order | query | No | Sort order by creation time. Defaults to desc. |
| asset_type | query | No | Filter by Photoshoots asset family. |
| liked | query | No | Include liked outputs. |
| disliked | query | No | Include disliked outputs. |
| unreviewed | query | No | Include outputs without an approval decision. |
| include_no_product | query | No | Include outputs that have no product. |
| include_brand_wide_project_assets | query | No | When project_id is supplied, also include brand-wide Photoshoot outputs. |
| search_query | query | No | Search prompt and related Photoshoot metadata. |
| author_ids | query | No | Comma-separated creator user IDs. |
| product_ids | query | No | Comma-separated product IDs. |
| aspect_ratios | query | No | Comma-separated aspect ratios. |
| resolutions | query | No | Comma-separated output resolutions. |
| statuses | query | No | Comma-separated generation statuses. |
| project_id | query | No | Filter to Photoshoot outputs assigned to an active project. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/photoshoots?statuses=completed&limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/worker-files/{assetId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetId | path | Yes | Finalized worker output asset ID. |
| download | query | No | Set to 1 to receive a five-minute signed URL instead of metadata. |
| preview | query | No | With download=1, set to 1 for inline PDF/audio/video preview; omit for attachment download. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/worker-files/$ASSET_ID" -H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/assets/{assetType}/{assetId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetType | path | Yes | Asset family. |
| assetId | path | Yes | Asset, generation, edit, ad, or batch output ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/user_upload/$ASSET_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/assets/{assetType}/{assetId}/download| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetType | path | Yes | Asset family. |
| assetId | path | Yes | Asset, generation, edit, ad, or batch output ID. |
curl -L "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/generation/$GENERATION_ID/download" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-o image.webp/api/brands/{brandId}/images/export| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -L "https://www.riverflow.ai/api/brands/$BRAND_ID/images/export" \
-X POST \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"asset_type":"generation","asset_id":"'$GENERATION_ID'","size":"1x","format":"webp"}' \
-o image.webp/api/brands/{brandId}/assets/{assetType}/{assetId}/download/export| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetType | path | Yes | Asset family. |
| assetId | path | Yes | Asset, generation, edit, product image, ad, or batch output ID. |
curl -L "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/generation/$GENERATION_ID/download/export" \
-X POST \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"size":"1x","format":"webp"}' \
-o image.webp/api/brands/{brandId}/assets/{assetType}/{assetId}/download/export-url| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| assetType | path | Yes | Asset family. |
| assetId | path | Yes | Asset, generation, edit, product image, ad, or batch output ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/generation/$GENERATION_ID/download/export-url" \
-X POST \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"size":"4x","format":"png"}'/api/brands/{brandId}/assets/project-assignment| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/assets/project-assignment" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"asset_id":"'$ASSET_ID'","project_id":"'$PROJECT_ID'"}'/api/brands/{brandId}/installed-skills/receipt| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/installed-skills/inspect| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/installed-skills/install| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
| Idempotency-Key | header | Yes | Stable key for this logical installation; reuse the identical body and key on retry. |
/api/brands/{brandId}/installed-skills/list| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/installed-skills/download| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/installed-skills/chat-source| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/get-connection| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/search| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/read-doc| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/verify-folder| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/create-folder| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/import-file| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/start-transfer| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/continue-transfer| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/google-workspace/get-transfer| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Current brand |
/api/brands/{brandId}/agents/superagent/external-connections/meta-ads/get-connection| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Brand ID |
/api/brands/{brandId}/agents/superagent/external-connections/meta-ads/list-assets| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Brand ID |
/api/brands/{brandId}/agents/superagent/external-connections/meta-ads/read-report| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Brand ID |
/api/brands/{brandId}/projects| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
| offset | query | No | offset |
| limit | query | No | limit |
curl -X GET "https://www.riverflow.ai/api/brands/{brandId}/projects"/api/brands/{brandId}/projects/{projectId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
| projectId | path | Yes | projectId |
curl -X GET "https://www.riverflow.ai/api/brands/{brandId}/projects/{projectId}"/api/brands/{brandId}/projects| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| Idempotency-Key | header | Yes | Required stable retry key. Reusing the same key with the same canonical request returns the original Project; changing the request returns 409. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/projects" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: project-holiday-drop-2026" \
-H "Content-Type: application/json" \
-d '{"name":"Holiday Drop","description":"Seasonal campaign work"}'/api/brands/{brandId}/scenes/save-image| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
/api/brands/{brandId}/scenes/{sceneId}/rename| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
| sceneId | path | Yes | sceneId |
/api/brands/{brandId}/scenes/derive| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
curl -X POST "https://www.riverflow.ai/api/brands/{brandId}/scenes/derive" -H 'Content-Type: application/json' --data '{"image_url": "https://example.com/reference.jpg", "anonymize": true}'/api/brands/{brandId}/scenes/save| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
curl -X POST "https://www.riverflow.ai/api/brands/{brandId}/scenes/save" -H 'Content-Type: application/json' --data '{"generation_id": "66666666-6666-4666-8666-666666666666"}'/api/brands/{brandId}/scenes/{sceneId}/status| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
| sceneId | path | Yes | sceneId |
curl -X GET "https://www.riverflow.ai/api/brands/{brandId}/scenes/{sceneId}/status"/api/brands/{brandId}/style-rules/derive| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | brandId |
curl -X POST "https://www.riverflow.ai/api/brands/{brandId}/style-rules/derive" -H 'Content-Type: application/json' --data '{"text_prompt": "Soft natural light with muted warm colors."}'/api/brands/{brandId}/characters| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/references| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/projects/{projectId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
| projectId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/projects/{projectId}/archive| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
| projectId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/style-rules/{styleRuleId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
| styleRuleId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/style-rules/{styleRuleId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
| styleRuleId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/scenes/{sceneId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
| sceneId | path | Yes | Exact current Brand/resource ID, resolved through discovery. |
/api/brands/{brandId}/agents/superagent/reference-inspections/youtube-video| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Brand ID bound to the current Superagent worker invocation. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/agents/superagent/reference-inspections/youtube-video" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.youtube.com/shorts/dQw4w9WgXcQ","question":"Identify the action, camera movement, pacing, composition and audio cues that could inform a product demonstration brief.","range":null}'/api/riverflow-api/mecurl "https://www.riverflow.ai/api/riverflow-api/me" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/teams/{teamId}/brands| Parameter | Location | Required | Description |
|---|---|---|---|
| teamId | path | Yes | Riverflow team ID. |
curl "https://www.riverflow.ai/api/teams/$TEAM_ID/brands" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/products| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. Defaults to 40. |
| search | query | No | Trimmed fuzzy search string over product names and source SKUs. |
| source_sku_id | query | No | Exact customer catalogue SKU filter. Use this instead of search when syncing by SKU. |
| order | query | No | Sort order. Defaults to most-recent. |
| source | query | No | Comma-separated product sources. |
| tts_link_status | query | No | Filter by TikTok Shop link status. |
| tts_live | query | No | Filter by products linked to a live TikTok Shop product. Cannot be combined with tts_link_status=unlinked. |
| include_product_images | query | No | Include product_images in list rows. Defaults to true. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/products?limit=40&include_product_images=true" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"curl "https://www.riverflow.ai/api/brands/$BRAND_ID/products?source_sku_id=SKU-123&include_product_images=true" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/product/{productId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/scenes/{id}| Parameter | Location | Required | Description |
|---|---|---|---|
| id | path | Yes | Exact scene ID. |
| brand_id | query | Yes | Brand used to authorize scene access. |
| team_owned_only | query | No | When true, exclude public/source scenes and return only scenes owned by the requested brand. |
curl "https://www.riverflow.ai/api/scenes/$SCENE_ID?brand_id=$BRAND_ID" -H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/scenes/searchcurl -X POST "https://www.riverflow.ai/api/scenes/search" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"brand_id":"'$BRAND_ID'","query":"studio product scene","limit":5}'/api/brands/{brandId}/style-rules| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/style-rules?limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/style-rules/{styleRuleId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| styleRuleId | path | Yes | Riverflow style rule ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/style-rules/$STYLE_RULE_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/style-rules/create| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/style-rules/create" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Clean studio light","rule_text":"Keep the background minimal and product labels legible.","reference_asset_ids":[],"colours":["white","soft grey"]}'/api/brands/{brandId}/characters| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/characters?limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/references| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
| reference_type | query | No | Optional saved-reference type filter. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/references?reference_type=texture&limit=25" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/product| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| Idempotency-Key | header | No | Optional retry key for API-key catalogue sync writes. Reusing the same key with the same canonical request replays the stored product response; changing the request returns 409. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_name": "Demo Product",
"product_image_url_list": ["https://example.com/product.webp"],
"product_description": "A reusable demo product",
"product_visual_cues": ["matte label"],
"source_sku_id": null,
"source_product_url": null,
"source_metadata": null
}'curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: catalogue-sync-SKU-123" \
-H "Content-Type: application/json" \
-d '{
"product_name": "Demo Product",
"product_image_asset_ids": ["a7cbec64-e830-48f1-822b-83f7c03358f8"],
"product_description": "A reusable demo product",
"product_visual_cues": ["matte label"],
"product_source": "USER_UPLOAD",
"source_sku_id": "SKU-123",
"source_product_url": "https://example.com/products/demo-product",
"source_metadata": {"source_updated_at": "2026-06-10T12:00:00Z"},
"upsert": true
}'/api/brands/{brandId}/product/{productId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_name":"Demo Product Updated"}'/api/brands/{brandId}/product/{productId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl -X DELETE "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/product-images/upload-session| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product-images/upload-session" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"original_file_name": "product-front.webp",
"mime_type": "image/webp",
"file_size_bytes": 524288
}'/api/brands/{brandId}/product-images/finalize| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product-images/finalize" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"storage_path": "'$STORAGE_PATH'",
"upload_session_id": "'$UPLOAD_SESSION_ID'"
}'/api/brands/{brandId}/product/{productId}/images| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID/images" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_image_asset_id":"'$ASSET_ID'","is_primary":false}'/api/brands/{brandId}/product/{productId}/images/attach| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID/images/attach" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"asset_ids": ["'$ASSET_ID'"],
"replace_product_image_id": "'$PRODUCT_IMAGE_ID'"
}'/api/brands/{brandId}/product/{productId}/images/order| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID/images/order" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ordered_image_ids": ["'$SECOND_PRODUCT_IMAGE_ID'", "'$FIRST_PRODUCT_IMAGE_ID'"]
}'/api/brands/{brandId}/product/{productId}/images/{imageId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| productId | path | Yes | Riverflow product ID. |
| imageId | path | Yes | Product image ID. |
curl -X DELETE "https://www.riverflow.ai/api/brands/$BRAND_ID/product/$PRODUCT_ID/images/$PRODUCT_IMAGE_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/personas| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| cursor | query | No | Opaque cursor returned as next_cursor by the previous page. Omit for the first page. |
| limit | query | No | Page size. Defaults to 50. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/personas?limit=50" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/personas| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| Idempotency-Key | header | Yes | Required stable key for retry-safe Persona writes. The same key and canonical request replay the stored result; changing the request returns 409. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/personas" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: persona-create-001" \
-H "Content-Type: application/json" \
-d '{"title":"Eco-conscious millennial","description":"A design-aware urban shopper who values low-impact materials and transparent sourcing."}'/api/brands/{brandId}/personas/{personaId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| personaId | path | Yes | Riverflow persona ID. |
| Idempotency-Key | header | Yes | Required stable key for retry-safe Persona writes. The same key and canonical request replay the stored result; changing the request returns 409. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/personas/$PERSONA_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: persona-update-001" \
-H "Content-Type: application/json" \
-d '{"description":"A design-aware urban shopper who prioritizes low-impact materials and transparent sourcing."}'/api/brands/{brandId}/personas/{personaId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| personaId | path | Yes | Riverflow persona ID. |
| Idempotency-Key | header | Yes | Required stable key for retry-safe Persona writes. The same key and canonical request replay the stored result; changing the request returns 409. |
curl -X DELETE "https://www.riverflow.ai/api/brands/$BRAND_ID/personas/$PERSONA_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: persona-archive-001"/api/photoshoot/generate| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe generation requests. |
curl -X POST "https://www.riverflow.ai/api/photoshoot/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-generate-001" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "'$BRAND_ID'",
"product_image_ids": ["'$PRODUCT_IMAGE_ID'"],
"character_ids": ["'$CHARACTER_ID'"],
"reference_ids": ["'$REFERENCE_ID'"],
"reference_asset_ids": ["'$ASSET_ID'"],
"scene_id": "'$SCENE_ID'",
"aspect_ratio": "1:1",
"user_prompt": "",
"generation_model": "auto",
"style_rule_id": null,
"project_id": null
}'/api/photoshoot/generate/{generationId}| Parameter | Location | Required | Description |
|---|---|---|---|
| generationId | path | Yes | Riverflow photoshoot generation ID. |
curl "https://www.riverflow.ai/api/photoshoot/generate/$GENERATION_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/generations/{generationId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| generationId | path | Yes | Riverflow photoshoot generation ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/generations/$GENERATION_ID/approval" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"approval":true}'/api/brands/{brandId}/generations/{generationId}/retry| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| generationId | path | Yes | Riverflow photoshoot generation ID. |
| Idempotency-Key | header | Yes | Required stable key for replay-safe photoshoot retry requests. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/generations/$GENERATION_ID/retry" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-generation-retry-001"/api/generation-results| Parameter | Location | Required | Description |
|---|---|---|---|
| photoshoot_generation_ids | query | No | Comma-separated photoshoot generation IDs to fetch. |
| freestyle_image_ids | query | No | Comma-separated freestyle image IDs to fetch. |
| include_signed_urls | query | No | Set to false when polling only for status and IDs. Defaults to true for direct API clients. |
curl "https://www.riverflow.ai/api/generation-results?photoshoot_generation_ids=$GENERATION_ID&freestyle_image_ids=$FREESTYLE_IMAGE_ID&include_signed_urls=false" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/shots/generatecurl -X POST "https://www.riverflow.ai/api/shots/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"generation_parent_id": "'$GENERATION_ID'"
}'/api/shots/generate/{shotGenerationId}| Parameter | Location | Required | Description |
|---|---|---|---|
| shotGenerationId | path | Yes | Riverflow shot generation ID. |
curl "https://www.riverflow.ai/api/shots/generate/$SHOT_GENERATION_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/images/enhance| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe selected-shot upscale requests. |
curl -X POST "https://www.riverflow.ai/api/images/enhance" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-shot-upscale-001" \
-H "Content-Type: application/json" \
-d '{
"generation_parent_id": "'$GENERATION_ID'",
"shot_generation_id": "'$SHOT_GENERATION_ID'",
"shot_index": 0,
"aspect_ratio": "1:1"
}'/api/videos/design/generate| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe video generation requests. |
curl -X POST "https://www.riverflow.ai/api/videos/design/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-video-001" \
-H "Content-Type: application/json" \
-d '{
"brandId": "'$BRAND_ID'",
"mode": "t2v",
"modelVersion": "kling-o3-pro",
"prompt": "Create a smooth product hero video.",
"settings": {
"resolution": "720p",
"ratio": "16:9",
"durationSec": 6
}
}'/api/brands/{brandId}/videos/{videoId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| videoId | path | Yes | Riverflow video generation ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/videos/$VIDEO_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/videos| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 50. |
| sort_order | query | No | Sort order by creation time. Defaults to desc. |
| status | query | No | Filter by video generation status. |
| liked | query | No | When true, include approved and neutral videos. |
| disliked | query | No | When true, include rejected and neutral videos. |
| search_query | query | No | Search text matched against video prompts. |
| aspect_ratio | query | No | Filter by one output aspect ratio. |
| aspect_ratios | query | No | Comma-separated output aspect ratio filters. |
| resolutions | query | No | Comma-separated output resolution filters. |
| model_versions | query | No | Comma-separated video model version filters. |
| video_types | query | No | Comma-separated video mode filters. |
| duration_buckets | query | No | Comma-separated duration bucket filters. |
| project_id | query | No | Filter to videos assigned to a project. |
| include_brand_wide_project_assets | query | No | When filtering by project, also include brand-wide videos. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/videos?limit=10&status=completed" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/videos/{videoId}/download| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| videoId | path | Yes | Riverflow video generation ID. |
curl -L "https://www.riverflow.ai/api/brands/$BRAND_ID/videos/$VIDEO_ID/download" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-o output.mp4/api/audio/generate| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe audio generation requests. |
curl -X POST "https://www.riverflow.ai/api/audio/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-audio-001" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "'$BRAND_ID'",
"script": "Meet the everyday bottle designed to keep up with your day.",
"character": "reassuring-host",
"speed": 1
}'/api/brands/{brandId}/audio/{audioGenerationId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| audioGenerationId | path | Yes | Riverflow audio generation ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/audio/$AUDIO_GENERATION_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/audio| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 50. |
| sort_order | query | No | Sort order by creation time. Defaults to desc. |
| status | query | No | Filter by audio generation status. |
| statuses | query | No | Comma-separated audio generation statuses. |
| liked | query | No | Include liked and neutral audio. Defaults to true. |
| disliked | query | No | Include disliked and neutral audio. Defaults to false. |
| author_ids | query | No | Comma-separated creator user IDs. |
| characters | query | No | Comma-separated curated character IDs. |
| project_id | query | No | Filter by project ID. |
| include_brand_wide_project_assets | query | No | When filtering by project, also include brand-wide audio generations. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/audio?limit=10&status=completed" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/photoshoot/freestyle/generate| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe freestyle generation requests. |
curl -X POST "https://www.riverflow.ai/api/photoshoot/freestyle/generate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-freestyle-001" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "'$BRAND_ID'",
"instruction": "Create a cinematic studio image with soft rim lighting.",
"style_rule_id": "'$STYLE_RULE_ID'",
"project_id": null,
"reference_asset_ids": ["'$ASSET_ID'"],
"aspect_ratio": "1:1",
"resolution": "2K",
"model_key": "riverflow-2-standard",
"workspace_kind": "photoshoots"
}'/api/photoshoot/freestyle/generate/{freestyleImageId}| Parameter | Location | Required | Description |
|---|---|---|---|
| freestyleImageId | path | Yes | Riverflow freestyle image generation ID. |
curl "https://www.riverflow.ai/api/photoshoot/freestyle/generate/$FREESTYLE_IMAGE_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/freestyle-images/{freestyleImageId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| freestyleImageId | path | Yes | Riverflow freestyle image generation ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/freestyle-images/$FREESTYLE_IMAGE_ID/approval" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"approval":true}'/api/brands/{brandId}/campaign-creatives| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 20. |
| status | query | No | Filter by ad generation status. |
| project_id | query | No | Filter by project ID. Omit for all brand-level and project-scoped ads. |
| liked | query | No | When true, return only approved ads. |
| disliked | query | No | When true, return only rejected ads. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives?limit=20" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| Idempotency-Key | header | Yes | Required stable key for replay-safe ad generation requests. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-ad-create-001" \
-H "Content-Type: application/json" \
-d '{
"template_id": "'$TEMPLATE_ID'",
"copy_text": "Launch offer: 20% off",
"copy_mode": "adapt",
"asset_images": [
{
"asset_id": "'$ASSET_ID'",
"template_slot_key": "product"
}
],
"num_output_images": 2
}'/api/brands/{brandId}/campaign-creatives/{adId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| adId | path | Yes | Riverflow ad generation ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/$AD_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives/{adId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| adId | path | Yes | Riverflow ad generation ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/$AD_ID/approval" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"approval": true}'/api/brands/{brandId}/campaign-creatives/{adId}/retry| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| adId | path | Yes | Riverflow ad generation ID. |
| Idempotency-Key | header | Yes | Required stable key for replay-safe ad retry requests. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/$AD_ID/retry" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-ad-retry-001" \
-H "Content-Type: application/json" \
-d '{"num_output_images": 1}'/api/brands/{brandId}/campaign-creatives/{adId}/variations| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| adId | path | Yes | Riverflow ad generation ID. |
| Idempotency-Key | header | Yes | Required stable key for replay-safe ad variation requests. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/$AD_ID/variations" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-ad-variations-001" \
-H "Content-Type: application/json" \
-d '{"count": 2}'/api/brands/{brandId}/campaign-creatives/feed| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 30. |
| project_id | query | No | Filter by project ID. Omit for all brand-level and project-scoped ads. |
| liked | query | No | When true, return only approved ads. |
| disliked | query | No | When true, return only rejected ads. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/feed?limit=30" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives/templates| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| owner_type | query | No | Filter by template owner type. |
| status | query | No | Filter by template status. Defaults to completed. Use all to include any status. |
| category | query | No | Template parent category filter. |
| has_template_layers | query | No | When true, return only templates with editable template layers. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 20. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/templates?status=completed" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives/templates/{templateId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| templateId | path | Yes | Riverflow ad template ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/templates/$TEMPLATE_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives/templates/{templateId}/similar| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| templateId | path | Yes | Riverflow ad template ID. |
| status | query | No | Filter by template status. Defaults to completed. Use all to include any status. |
| offset | query | No | Zero-based offset. Defaults to 0. |
| limit | query | No | Page size. Defaults to 20. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/templates/$TEMPLATE_ID/similar" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/campaign-creatives/templates/search| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/campaign-creatives/templates/search" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "square product launch ad", "limit": 20}'/api/brands/{brandId}/videos/{videoId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| videoId | path | Yes | Riverflow video generation ID. |
/api/brands/{brandId}/videos/{videoId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| videoId | path | Yes | Riverflow video generation ID. |
/api/brands/{brandId}/audio/{audioGenerationId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| audioGenerationId | path | Yes | Riverflow audio generation ID. |
/api/brands/{brandId}/audio/{audioGenerationId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| audioGenerationId | path | Yes | Riverflow audio generation ID. |
/api/images/edit| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe image operation requests. |
curl -X POST "https://www.riverflow.ai/api/images/edit" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-image-edit-001" \
-H "Content-Type: application/json" \
-d '{
"parent_generation_id": "'$GENERATION_ID'",
"instruction": "Remove the background and place the product on a matte white surface.",
"aspect_ratio": "1:1",
"reference_asset_ids": [],
"mask_regions": [
{ "left": 0.18, "top": 0.22, "width": 0.48, "height": 0.55 }
],
"resolution": "2K",
"model_key": "riverflow-2-pro"
}'/api/brands/{brandId}/edit-images/{editId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| editId | path | Yes | Riverflow edit image ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/edit-images/$EDIT_ID/approval" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"approval":true}'/api/images/edit/uploaded-asset| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe image operation requests. |
curl -X POST "https://www.riverflow.ai/api/images/edit/uploaded-asset" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: uploaded-asset-image-edit-001" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "'$BRAND_ID'",
"source_asset_id": "'$USER_UPLOAD_ASSET_ID'",
"instruction": "Change only the floor surface to a warm golden metallic finish.",
"aspect_ratio": "1:1",
"mask_regions": [
{ "left": 0, "top": 0.55, "width": 1, "height": 0.45 }
],
"resolution": "2K",
"model_key": "riverflow-2.5-pro-high"
}'/api/images/enhance| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe image operation requests. |
curl -X POST "https://www.riverflow.ai/api/images/enhance" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-image-enhance-001" \
-H "Content-Type: application/json" \
-d '{
"generation_parent_id": "'$GENERATION_ID'",
"aspect_ratio": "1:1"
}'/api/images/refsr| Parameter | Location | Required | Description |
|---|---|---|---|
| Idempotency-Key | header | Yes | Required stable key for replay-safe image operation requests. |
curl -X POST "https://www.riverflow.ai/api/images/refsr" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Idempotency-Key: manual-image-refsr-001" \
-H "Content-Type: application/json" \
-d '{
"job_id": "'$REFSR_JOB_ID'",
"generation_parent_id": "'$GENERATION_ID'",
"aspect_ratio": "1:1"
}'/api/brands/{brandId}/tts/connection| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/tts/connection" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/tts/shops| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/tts/shops" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/tts/products/import/queue| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/tts/products/import/queue" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/api/brands/{brandId}/tts/products/import/active| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/tts/products/import/active" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/tts/products/import/requests/{requestId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| requestId | path | Yes | TikTok Shop product import request ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/tts/products/import/requests/$REQUEST_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/batch-runs/estimate| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-runs/estimate" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"saved_action_id":"'$SAVED_ACTION_ID'","items":[{"client_item_key":"sku-001","inputs":[{"role":"source","source_type":"product_image","source_id":"'$PRODUCT_IMAGE_ID'","metadata":{}}]}],"estimate_context":{}}'/api/brands/{brandId}/batch-actions/requests| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action_type":"FREESTYLE_WITH_REFERENCE","input_images":[{"source_type":"product_image","source_id":"'$PRODUCT_IMAGE_ID'"}],"configurations":[{"config_key":"hero","sort_order":0,"prompt":"Create a clean ecommerce hero image."}]}'/api/brands/{brandId}/batch-actions/requests| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| offset | query | No | Zero-based offset. |
| limit | query | No | Page size. |
| status | query | No | Filter by request status. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests?limit=20" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/batch-actions/requests/{requestId}| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| requestId | path | Yes | Batch action request ID. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests/$REQUEST_ID" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/batch-actions/requests/{requestId}/submit| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| requestId | path | Yes | Batch action request ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests/$REQUEST_ID/submit" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/batch-actions/requests/{requestId}/review/next| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| requestId | path | Yes | Batch action request ID. |
| current_output_id | query | No | Current output cursor. |
curl "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests/$REQUEST_ID/review/next" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"curl "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/requests/$REQUEST_ID/review/next" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/brands/{brandId}/batch-actions/outputs/{outputId}/approval| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| outputId | path | Yes | Batch action output ID. |
curl -X PATCH "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/outputs/$OUTPUT_ID/approval" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"approval":true}'/api/brands/{brandId}/batch-actions/outputs/{outputId}/retry| Parameter | Location | Required | Description |
|---|---|---|---|
| brandId | path | Yes | Riverflow brand ID. |
| outputId | path | Yes | Batch action output ID. |
curl -X POST "https://www.riverflow.ai/api/brands/$BRAND_ID/batch-actions/outputs/$OUTPUT_ID/retry" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/teams/{teamId}/credits/billing-summary| Parameter | Location | Required | Description |
|---|---|---|---|
| teamId | path | Yes | Riverflow team ID. |
curl "https://www.riverflow.ai/api/teams/$TEAM_ID/credits/billing-summary" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"/api/teams/{teamId}/credits/usage| Parameter | Location | Required | Description |
|---|---|---|---|
| teamId | path | Yes | Riverflow team ID. |
| start_at | query | Yes | Inclusive range start as an ISO-8601 timestamp with an explicit timezone. |
| end_at | query | Yes | Exclusive range end as an ISO-8601 timestamp with an explicit timezone. |
| offset | query | No | Number of eligible history entries to skip. |
| limit | query | No | Maximum history entries to return. Totals always cover the full range. |
curl "https://www.riverflow.ai/api/teams/$TEAM_ID/credits/usage?start_at=2026-06-01T00%3A00%3A00.000Z&end_at=2026-07-01T00%3A00%3A00.000Z&offset=0&limit=50" \
-H "Authorization: Riverflow-Key $RIVERFLOW_API_KEY"