Daily Shot
Generate a single styled portrait of a model in a scene. Each shot is either the before or after variant.
Cost: 10 credits per shot.
Authentication
All requests require an API key passed as a Bearer token. Create keys in your dashboard. Each key is shown once at creation — store it securely.
Authorization: Bearer rm_live_your_key_hereRate limits
- Burst: 1 request per 2 seconds, per API key, per POST endpoint.
POST /api/v1/dailyshot/generateandPOST /api/v1/reel/composeuse independent buckets, so firing one of each inside the same window does not trip the limiter. A 429 carriesRetry-After: <seconds>and aretry_after_secondsfield in the JSON body. - Concurrency: max 5 in-flight tasks per account, across all tools.
- GET endpoints are not rate-limited.
/dailyshot/options,/reel/templates, and/tasks/{id}can be called as often as needed. Recommended poll interval: 2 seconds.
List Options
GET /api/v1/dailyshot/options
Returns the effects, models, and scenes you can supply to /v1/dailyshot/generate. The payload rarely changes, so callers may cache it.
curl https://reelmaxing.com/api/v1/dailyshot/options \
-H "Authorization: Bearer rm_live_your_key_here"{
"cost_credits": 10,
"sides": ["before", "after"],
"effects": [
{
"id": "looksmaxxing",
"label": "Looksmaxxing",
"tagline": "Sharper features"
},
{
"id": "weight-loss",
"label": "Weight loss",
"tagline": "Leaner build"
}
],
"models": [
{
"id": "lmx-1",
"effect_id": "looksmaxxing",
"name": "Brandon",
"gender": "M",
"race": "white",
"age": "18-25"
},
{
"id": "wl-77",
"effect_id": "weight-loss",
"name": "Min",
"gender": "F",
"race": "asian",
"age": "18-25"
}
],
"scenes": [
{
"id": "bathroom-mirror-headshot",
"label": "Bathroom mirror",
"setting": "home",
"aspect": [3, 4],
"effect_id": "looksmaxxing"
},
{
"id": "wl-bedroom-morning-face-check",
"label": "Bedroom morning face check",
"setting": "home",
"aspect": [3, 4],
"effect_id": "weight-loss"
}
]
}Generate a Daily Shot
POST /api/v1/dailyshot/generate
Each call creates one shot. To get both before and after, fire two requests in parallel. Returns a 202 with a queued task id.
curl -X POST https://reelmaxing.com/api/v1/dailyshot/generate \
-H "Authorization: Bearer rm_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"effect_id": "looksmaxxing",
"model_id": "lmx-1",
"scene_id": "bathroom-mirror-headshot",
"side": "after"
}'{
"task_id": "aBcDeFgHiJkLmNoP",
"status": "queued",
"estimated_time_seconds": 30,
"credits": {
"required": 10,
"remaining": 820
}
}Two effects are currently available: looksmaxxing (sharper features) and weight-loss (leaner build). Swap effect_id and pair it with a matching model_id + scene_id from the options endpoint — the registry scopes each model and scene to exactly one effect.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| effect_id | string | Yes | Effect family id from /v1/dailyshot/options. Current values: looksmaxxing, weight-loss. |
| model_id | string | Yes | Model id; must belong to the chosen effect. |
| scene_id | string | Yes | Scene id from the options endpoint; must belong to the chosen effect. |
| side | string | Yes | before or after. |
Poll for Results
GET /api/v1/tasks/{task_id}
Poll the task_id returned from the generate/compose call. Status progresses through queued → processing → complete (or failed). Recommended interval: 2 seconds.
curl https://reelmaxing.com/api/v1/tasks/aBcDeFgHiJkLmNoP \
-H "Authorization: Bearer rm_live_your_key_here"{
"task_id": "aBcDeFgHiJkLmNoP",
"kind": "dailyshot",
"status": "processing",
"created_at": "2026-05-15T10:00:00Z",
"updated_at": "2026-05-15T10:00:12Z"
}{
"task_id": "aBcDeFgHiJkLmNoP",
"kind": "dailyshot",
"status": "complete",
"created_at": "2026-05-15T10:00:00Z",
"updated_at": "2026-05-15T10:00:31Z",
"credits_consumed": 10,
"outputs": [
{
"index": 0,
"image_url": "https://r2.reelmaxing.com/.../image_1.jpeg"
}
],
"outputs_count": 1,
"aspect_ratio": "3:4",
"side": "after",
"effect_id": "looksmaxxing",
"model_id": "lmx-1",
"scene_id": "bathroom-mirror-headshot",
"effect_label": "Looksmaxxing",
"model_name": "Brandon",
"scene_label": "Bathroom mirror"
}Errors
| Status | Meaning |
|---|---|
| 400 | Invalid request body or parameters |
| 401 | Invalid or missing API key |
| 402 | Insufficient credits |
| 404 | Task not found |
| 429 | Rate limit exceeded or concurrency cap reached |
| 500 | Internal server error |
All error responses are JSON. The shapes you should expect:
{ "error": "ratio must be one of 1:1, 4:5, 9:16, 16:9, 3:1" }{ "error": "Invalid API key" }{
"error": "insufficient_credits",
"credits": { "required": 10, "available": 4 }
}{ "error": "Task not found" }{ "error": "rate_limited", "retry_after_seconds": 2 }{
"error": "concurrency_limit_reached",
"limit": 5,
"in_flight": 5,
"slots_needed": 1
}Ready to get started?