Install
openclaw skills install reveal-feedbackInteract with Reveal feedback infrastructure to manage products, create review tasks, read AI-analyzed user feedback, get sentiment insights, view submission...
openclaw skills install reveal-feedbackReveal is a universal feedback platform where human reviewers screen-record themselves using products and provide AI-analyzed feedback. This skill connects to the Reveal REST API to manage the full feedback lifecycle — from collecting reviews to generating marketing content from that feedback.
All API calls require the REVEAL_API_KEY environment variable. The key is a vendor API key generated from the Reveal dashboard under Settings → API Keys.
Every request uses this header:
Authorization: Bearer $REVEAL_API_KEY
Base URL: https://www.testreveal.ai/api/v1
(Override with REVEAL_BASE_URL env var if set.)
Fetch products, active review tasks, and unread notifications to give the user a quick status update.
Steps:
/products to list vendor products/review-tasks?status=active to list active tasks/notifications?unread=true&limit=5 to get unread notificationsFetch AI-aggregated insights: top issues, top positives, sentiment distribution, and suggestions.
Steps:
/products to find the product ID matching the user's request/insights/{productId} to get aggregated insightsFetch quantitative metrics for a product.
Steps:
/products/{productId}/analyticsGet individual review submissions with transcripts, AI analysis, sentiment, and issue counts.
Steps:
/review-tasks?status=active&limit=5 to find the relevant task (or use a task ID if provided)/review-tasks/{taskId}/submissions to get all submissionsCreate a new user-testing task so reviewers can test a product.
Steps:
/products to find the product matching the user's description/review-tasks with body:{
"title": "extracted title",
"productId": "matched product ID",
"requiredReviewers": 5,
"instructions": {
"objective": "what the reviewer should accomplish",
"steps": "step-by-step instructions",
"feedback": "what feedback to focus on"
}
}
Close, pause, or modify an existing review task.
Steps:
/review-tasks/{taskId} with fields to update (status, title, description, requiredReviewers)Show all products registered on the vendor's Reveal account.
Steps:
/products?limit=50Check for new activity on Reveal.
Steps:
/notifications?unread=true&limit=20/notifications with {"markAllRead": true}Set up real-time event notifications.
Steps:
/webhooks with body:{
"url": "https://user-provided-url",
"events": ["review.submitted", "review.analyzed", "task.completed", "video.generated"]
}
Steps:
/webhooksTurn raw user feedback into polished, persuasive marketing statements.
Steps:
/marketing/summarize-highlights with body:{
"highlights": ["feedback string 1", "feedback string 2", "..."]
}
summary — an array of marketing-ready highlight stringsGenerate a 30-second video script from product feedback or the product description.
Steps:
/products to find the product ID/insights/{productId} to extract positive highlights/marketing/generate-script with body:{
"productId": "the product ID",
"positiveHighlights": ["highlight 1", "highlight 2"],
"scriptType": "problem-solution"
}
positiveHighlights is optional; if omitted the product description is usedscriptType options: problem-solution, empathetic, aspirational, story-drivenscript — a formatted script with [Scene X: Title] headers, Visual and Narration per sceneCreate a marketing image for a product with AI.
Steps:
/products to find the product ID/marketing/generate-image with body:{
"productId": "the product ID",
"prompt": "Modern dashboard showcasing the key analytics features",
"styleName": "Modern Gradient",
"tagline": "Insights that drive growth"
}
prompt is required — the creative direction for the imagestyleName and tagline are optionalimageUrl — a public URL to the generated imageParse a script into structured scenes and apply edits — change narration/visuals, add new scenes, or remove scenes.
Steps:
/marketing/edit-script with body:{
"script": "the current script text",
"operations": [
{ "action": "edit", "sceneNumber": 3, "narration": "Updated narration text" },
{ "action": "add", "position": 4, "title": "New CTA", "visual": "Happy customer using phone", "narration": "Try it free today!" },
{ "action": "remove", "sceneNumber": 6 }
]
}
operations is optional — omit it to just parse the script into structured scenesaction: "edit" — update title, visual, or narration of an existing scene (only include fields to change)action: "add" — insert a new scene at position (or append if omitted)action: "remove" — delete a scene by number (scenes renumber automatically)script string and a scenes array with structured scene objectsFind stock images and videos from the Pictory library to use in specific video scenes.
Steps:
/marketing/media-search?keyword=business+meeting&page=1
keyword is required — the search termcategory and page are optionalresults — array of { url, type, thumbnail }url values in the customMediaUrls field of generate-video to assign media to specific scenesCreate a full marketing video from a script. This is a multi-step async workflow.
Steps:
/marketing/generate-video with body:{
"productId": "the product ID",
"script": "the full script with [Scene X: Title] headers",
"voiceOver": { "speaker": "Jackson", "speed": 100 },
"musicVolume": 0.4,
"customMediaUrls": {
"1": "https://stock-media-url-for-scene-1",
"3": "https://stock-media-url-for-scene-3"
}
}
customMediaUrls is optional — map scene numbers to stock media URLs from media-search{ "data": { "jobId": "...", "accessToken": "...", "productId": "..." } }/marketing/render-video/{jobId} with body:{
"accessToken": "the accessToken from step 4",
"webhook": "https://optional-callback-url"
}
/marketing/video-status?jobId={jobId}
Response: { "data": { "status": "in-progress" | "completed" | "failed", "videoUrl": "..." } }
status is completedvideoUrl contains the final video URLAll API responses follow this structure:
{ "data": { ... } }{ "error": { "code": "ERROR_CODE", "message": "description" } }video-status rather than assuming immediate completionaccessToken from generate-video — it's needed for render-video