Fields
caption: the on-screen hook.postCaptionandhashtags: the platform caption.whyandangle: the rationale and the brand angle it came from.score: hook score, 0 to 100. A model estimate, not a view forecast.status:pending,accepted,scheduledordiscarded.deck: for template formats, returned byGET /generations/{id}.
Generate
POST /generations is synchronous and free. count is 1 to 10. prompt steers the batch. format pins one format; leave it out and the mix comes from your brand. influencerId writes for one AI avatar. Limit: 10 requests per 300 seconds per key.
Request
curl -X POST "https://looptake.com/api/v1/generations" \
-H "Authorization: Bearer $LOOPTAKE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"count": 5,
"format": "slideshow",
"prompt": "the September restock, for owners of one or two shops"
}'Response 201
{
"success": true,
"data": [
{
"id": "6522d1ec-2c11-4d3a-b078-6f6cfe9f217b",
"format": "slideshow",
"caption": "One stockout costs more than a year of forecasting",
"postCaption": "The maths nobody runs before they run out.",
"hashtags": ["#retail", "#inventory"],
"why": "Answers the price objection with the cost of the alternative.",
"angle": "The cost of one stockout",
"score": 78,
"status": "pending"
}
]
}GET /generations lists the pending queue. Ideas that belong to an automation are listed under that automation.
Formats
18 formats. 3 template formats (walloftext, slideshow, greenscreen) render from a deck and cost no credits. The other 15 generate AI media and cost 10 credits per render, refunded if the render fails.
Deck
A deck is deterministic JSON for one video. Geometry is normalised to the frame. Edit it and send it to POST /posts with a format; that post returns 202 because it renders first.
Deck (shortened)
{
"version": 1,
"ratio": "9:16",
"durationMs": 8000,
"fps": 30,
"background": { "kind": "clip", "src": "a7273471-d932-4f9a-958e-79abdd1f3fd7" },
"slides": [
{
"startMs": 0,
"endMs": 8000,
"boxes": [
{
"id": "hook",
"text": "One stockout costs more than a year of forecasting",
"rect": { "x": 0.08, "y": 0.18, "w": 0.84, "h": 0.34 }
}
]
}
],
"captions": { "enabled": true, "style": "karaoke" }
}Accept
Accepting turns an idea into a content piece and returns a contentId. This counts against the plan quota. Accepting twice returns the same piece. You can skip this step: pass suggestionId to POST /posts.
Request
curl -X POST "https://looptake.com/api/v1/generations/6522d1ec-2c11-4d3a-b078-6f6cfe9f217b/accept" \
-H "Authorization: Bearer $LOOPTAKE_API_KEY"Variants
Rewrites only the hook, for A/B tests. Each variant is a new idea with its own id and score.
Request
curl -X POST "https://looptake.com/api/v1/generations/6522d1ec-2c11-4d3a-b078-6f6cfe9f217b/variants" \
-H "Authorization: Bearer $LOOPTAKE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"count": 3}'