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.

Header
Authorization: Bearer rm_live_your_key_here

Rate limits

  • Burst: 1 request per 2 seconds, per API key, per POST endpoint. POST /api/v1/dailyshot/generate and POST /api/v1/reel/compose use independent buckets, so firing one of each inside the same window does not trip the limiter. A 429 carries Retry-After: <seconds> and a retry_after_seconds field 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.

Request
curl https://reelmaxing.com/api/v1/dailyshot/options \
  -H "Authorization: Bearer rm_live_your_key_here"
Response
{
  "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.

Request
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"
  }'
Response (202 Accepted)
{
  "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

FieldTypeRequiredDescription
effect_idstringYesEffect family id from /v1/dailyshot/options. Current values: looksmaxxing, weight-loss.
model_idstringYesModel id; must belong to the chosen effect.
scene_idstringYesScene id from the options endpoint; must belong to the chosen effect.
sidestringYesbefore or after.

Poll for Results

GET /api/v1/tasks/{task_id}

Poll the task_id returned from the generate/compose call. Status progresses through queuedprocessing complete (or failed). Recommended interval: 2 seconds.

Request
curl https://reelmaxing.com/api/v1/tasks/aBcDeFgHiJkLmNoP \
  -H "Authorization: Bearer rm_live_your_key_here"
Response (processing)
{
  "task_id": "aBcDeFgHiJkLmNoP",
  "kind": "dailyshot",
  "status": "processing",
  "created_at": "2026-05-15T10:00:00Z",
  "updated_at": "2026-05-15T10:00:12Z"
}
Response (complete)
{
  "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

StatusMeaning
400Invalid request body or parameters
401Invalid or missing API key
402Insufficient credits
404Task not found
429Rate limit exceeded or concurrency cap reached
500Internal server error

All error responses are JSON. The shapes you should expect:

400 · Validation failure
{ "error": "ratio must be one of 1:1, 4:5, 9:16, 16:9, 3:1" }
401 · Missing or invalid API key
{ "error": "Invalid API key" }
402 · Insufficient credits
{
  "error": "insufficient_credits",
  "credits": { "required": 10, "available": 4 }
}
404 · Task not found
{ "error": "Task not found" }
429 · Burst rate limit (also sets Retry-After header)
{ "error": "rate_limited", "retry_after_seconds": 2 }
429 · Concurrency cap reached
{
  "error": "concurrency_limit_reached",
  "limit": 5,
  "in_flight": 5,
  "slots_needed": 1
}

Ready to get started?