FunPhantom API Documentation
Domain:
https://funphantom.in/api/Authentication: Single
X-API-Keyheader on every request.Catalog: API generation does not filter prompts. On this host,
GET /templatesreturns the curated catalog. Usensfw.funphantom.infor the complete list.
Table of Contents
- Getting Started
- Authentication
- Rate Limits
- Common Headers & Response Format
- Error Codes
- User Endpoints
- Template & Catalog Endpoints
- Generation Endpoints
- Job Status & Management
- Delete Endpoints
- Catalog & Domain Notes
- Code Examples
- FAQ
1. Getting Started
1.1 What You Can Do
The FunPhantom API exposes the same generation capabilities available on the website:
- Video Generation (WAN 2.2): Image-to-video from an input photo
- Video + Audio (LTX): Text-to-video or image-to-video with synced audio
- MiniMax H3: Text-to-video, image-to-video, and reference-to-video
- Wan 3.0 Ref2V: Reference-to-video (1–5 images) with optional audio / prompt expansion
- Image Generation (T2I): Flux text-to-image
- Image Edit: Blend/edit images using base64 inputs
- Image Inpaint: Mask-based inpainting
- Faceswap: Face swap onto a target image (Pro subscription required)
- Job Management: Submit jobs, poll status, list jobs, delete jobs, reuse settings
- Template Catalogs: LoRA video templates, image models, image-edit templates, H3 R2V templates
1.2 Request Flow
- Authenticate with
X-API-Key: fp_your_keyon every request. - For POST endpoints, send
Content-Type: application/jsonwith your parameters and base64-encoded images. - Receive a
job_idin the submit response. - Poll
GET /api/job/{job_id}every 5–10 seconds untilstatusisCOMPLETEDorFAILED.
Status reads are database-only — the API does not call RunPod on your behalf. A background worker handles processing and billing.
2. Authentication
2.1 API Key Format
Your API key is a single opaque token:
X-API-Key: fp_AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abc
Send it in the X-API-Key header on every request. There is no second secret and no request signing (HMAC).
2.2 Obtaining an API Key
API keys are generated from the FunPhantom dashboard under Account → API Keys. You will only see the full key once at creation — save it immediately.
2.3 Using Your Key
Python Example
import requests
API_KEY = "fp_your_api_key_here"
BASE_URL = "https://funphantom.in/api"
HEADERS = {
"X-API-Key": API_KEY,
"Content-Type": "application/json"
}
# GET request
r = requests.get(f"{BASE_URL}/user/info", headers=HEADERS)
print(r.json())
# POST request
payload = {
"prompt": "a cinematic video",
"image_base64": "data:image/jpeg;base64,...",
"duration": 6
}
r = requests.post(f"{BASE_URL}/generate/video", headers=HEADERS, json=payload)
print(r.json())
JavaScript Example
const API_KEY = 'fp_your_api_key_here';
const BASE_URL = 'https://funphantom.in/api';
const headers = {
'X-API-Key': API_KEY,
'Content-Type': 'application/json'
};
const payload = { prompt: 'a cinematic video', image_base64: 'data:image/jpeg;base64,...', duration: 6 };
const resp = await fetch(`${BASE_URL}/generate/video`, { method: 'POST', headers, body: JSON.stringify(payload) });
console.log(await resp.json());
2.4 Important Notes
- All requests (GET and POST) require
X-API-Key. - Never embed your API key in client-side code or public repositories.
- Keys can be deleted and rotated from the API Dashboard.
3. Rate Limits
Rate limits are enforced per IP and per API key:
| Endpoint Group | Limit |
|---|---|
User read (/user/*, /templates, catalogs) |
120 / 60 s |
Job status / list (/job/*, /jobs, /stats) |
120 / 60 s |
Video generation (/generate/video) |
20 / 60 s |
| Video + Audio, MiniMax H3 | 60 / 60 s |
| Wan 3.0 Ref2V | 30 / 60 s |
| Image generation, image edit, inpaint | 30 / 60 s |
| Faceswap | 20 / 60 s |
| Delete endpoints | 20 / 60 s |
When exceeded:
{
"error": "Too many requests. Please slow down.",
"code": 429
}
4. Common Headers & Response Format
4.1 Required Headers
| Header | Value | Required |
|---|---|---|
X-API-Key |
Your fp_… token |
Always |
Content-Type |
application/json |
POST / PUT / PATCH |
4.2 Submit Response Format
Generation endpoints return a JSON object like:
{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "submitted",
"message": "Video generation started successfully (1.2 tokens used)",
"token_cost": 1.2,
"remaining_tokens": 48.8
}
Some endpoints add type-specific fields (see §8).
4.3 Base64 Image Format
Images may be sent as:
- Raw base64 string
- Data URI:
data:image/jpeg;base64,/9j/4AAQ… - Public HTTPS URL (where supported)
5. Error Codes
All errors return JSON:
{
"error": "Human-readable message",
"code": 400
}
| HTTP | Meaning |
|---|---|
| 400 | Invalid request / validation error |
| 401 | Missing or invalid API key |
| 402 | Insufficient tokens |
| 403 | Subscription required (e.g. premium LoRA, faceswap) |
| 404 | Resource not found |
| 429 | Rate limit or concurrent job slot exceeded |
| 500 | Server / RunPod submission error |
| 503 | Service maintenance (e.g. MiniMax H3 disabled) |
6. User Endpoints
6.1 GET /api/user/info
Returns the authenticated user's profile.
Response:
{
"id": 42,
"email": "[email protected]",
"username": "myuser",
"first_name": "Jane",
"last_name": "Doe",
"tokens": 48.8,
"subscription_active": true,
"subscription_end": "2026-12-31T00:00:00",
"created_at": "2025-06-01T10:00:00"
}
Internal fields (is_boss, password_hash, OAuth tokens) are never exposed.
6.2 GET /api/user/balance
Response:
{
"tokens": 48.8,
"subscription_active": true,
"subscription_end": "2026-12-31T00:00:00",
"can_generate": true
}
6.3 GET /api/user/tokens
Response:
{
"tokens": 48.8,
"total_tokens_used": 152.3,
"subscription_active": true
}
7. Template & Catalog Endpoints
7.1 GET /api/templates
List WAN 2.2 LoRA / video templates. Alias: GET /api/lora-templates.
Responses include full prompt text so API clients can display or override prompts before generating.
Response:
{
"templates": {
"blink_missionary": {
"id": "blink_missionary",
"name": "Blink Missionary",
"category": "Dance",
"subcategory": null,
"is_mature": false,
"usage_count": 152,
"release_date": "2025-01-15",
"is_new": false,
"is_featured": true,
"prompt": "A woman dancing…",
"negative_prompt": "blurry, low quality…",
"description": "Short description for UI",
"hint": "Upload a clear full-body photo",
"sub_templates": [
{
"id": "close_up",
"name": "Close-up",
"prompt": "Close-up variation prompt…",
"negative_prompt": "…"
}
]
}
},
"count": 42
}
On this host, templates with is_mature: true (or category filtered by catalog rules) are omitted from the list.
Boss-only: GET /api/templates?full=1 returns raw template JSON plus a categories object.
7.2 GET /api/image-models
List text-to-image models for POST /api/generate/image.
Response:
{
"success": true,
"models": {
"flux_dev": {
"id": "flux_dev",
"name": "Flux Dev",
"description": "Default Flux model",
"type": "image",
"has_lora": false
}
}
}
7.3 GET /api/image-edit-templates
Response:
{
"success": true,
"templates": {
"oil_painting": {
"id": "oil_painting",
"name": "Oil Painting",
"category": "Style",
"description": "Transform into oil painting",
"requires_second_image": false,
"usage_count": 89
}
}
}
7.4 GET /api/h3-r2v-templates
MiniMax H3 reference-to-video template catalog.
Query params: sort (latest | most-used | free-first | name), id (single template).
API-key clients always receive template prompts.
List response:
{
"templates": {
"cinematic_walk": {
"id": "cinematic_walk",
"name": "Cinematic Walk",
"category": "Motion",
"prompt": "…",
"usage_count": 34
}
},
"categories": ["Motion", "Dance"],
"sort": "latest",
"pro_prompt_lock_enabled": false
}
Single template (?id=cinematic_walk):
{
"template": { "id": "cinematic_walk", "name": "Cinematic Walk", "prompt": "…" },
"pro_prompt_lock_enabled": false
}
8. Generation Endpoints
8.1 POST /api/generate/video
Alias: POST /api/generate
Image-to-video (WAN 2.2).
| Field | Type | Required | Description |
|---|---|---|---|
image_base64 |
string | Yes | Input photo |
prompt |
string | Yes* | Text prompt (*optional if lora_template provided) |
lora_template |
string | No | Template ID from /templates |
sub_template |
string | No | Sub-template ID |
orientation |
string | No | portrait (default), landscape, square |
duration |
int | No | 3–8 seconds (default 6) |
steps |
int | No | 4, 6, or 8 (default 4) |
cfg |
float | No | Default 1.0 |
seed |
int | No | ≥0 fixed; -1 random |
negative_prompt |
string | No | Override template negative |
video_quality |
string | No | legacy or new |
end_image_base64 |
string | No | End frame (only with video_quality: "new") |
result_type |
string | No | url (default) or base64 |
auto_upscale |
bool | No | Auto upscale on completion |
platform |
string | No | Partner tracking label |
in_app_username |
string | No | End-user identifier for analytics |
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"message": "Video generation started successfully (1.2 tokens used)",
"token_cost": 1.2,
"remaining_tokens": 47.6,
"result_type": "url",
"video_quality": "legacy"
}
8.2 POST /api/generate/video-audio
Alias: POST /api/video-audio/generate
Text-to-video or image-to-video with audio.
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Text prompt |
duration |
int | No | 5–20 seconds (default 5) |
width / height |
int | No | 64–1240, multiples of 8 |
image_base64 |
string | No | If set → I2V mode |
template |
string | No | Template ID (uses template prompt) |
negative_prompt |
string | No | Override negative prompt |
frame_rate |
int | No | 16 (T2V default) or 25 (I2V default) |
I2V is unlocked for API keys (no Pro gate on this route).
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"message": "Video+Audio generation started (4.5 tokens used)",
"token_cost": 4.5,
"remaining_tokens": 43.1,
"mode": "T2V"
}
8.3 POST /api/generate/image-edit
| Field | Type | Required | Description |
|---|---|---|---|
image_1_base64 |
string | Yes | Primary image |
prompt |
string | Yes* | Edit prompt (*or from template_id) |
image_2_base64 |
string | No | Secondary image |
image_3_base64 |
string | No | Third image (Ultra only) |
template_id |
string | No | From /image-edit-templates |
model |
string | No | qwen (default) or flux |
version |
string | No | v2 (default) |
v2_mode |
string | No | fast (default) or quality (2× cost) |
width / height |
int | No | Output dimensions |
guidance |
float | No | Flux guidance |
seed |
int | No | Random if omitted |
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"token_cost": 0.5,
"remaining_tokens": 42.6
}
8.4 POST /api/generate/image
Flux text-to-image.
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Text prompt |
model |
string | No | Model ID (default Default) |
lora_template |
string | No | LoRA model ID from /image-models |
width / height |
int | No | Max 2048 (default 1024) |
guidance |
float | No | Default 7.5 |
seed |
int | No | -1 for random |
num_inference_steps |
int | No | Default 4 |
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"token_cost": 0.4,
"remaining_tokens": 42.2
}
8.5 POST /api/generate/minimax-h3
Aliases: POST /api/minimax-h3/generate
| Field | Type | Required | Description |
|---|---|---|---|
mode |
string | No | t2v, i2v, r2v (auto-detected if omitted) |
prompt |
string | Yes | Text prompt |
duration |
int | No | 5–20 s depending on tier |
megapixels |
float | No | Resolution tier |
aspect_ratio |
string | No | e.g. 16:9 (Widescreen) |
turbo_mode |
bool | No | Default true |
seed |
int | No | -1 for random |
image_base64 |
string | I2V | Input image |
reference_images |
array | R2V | 1–4 reference images |
template_id |
string | No | H3 template (mode=r2v recommended, or mode=i2v with image_base64) |
sub_template_id |
string | No | Sub-variation |
realism_lora |
bool | No | R2V realism enhancement |
With template_id + mode=i2v, the server prepends an identity-preservation preamble and attaches the template’s style LoRAs. With template_id and no mode (or t2v), mode defaults to r2v.
Do not send loras, lora_name, style_lora, or lora_pairs — style LoRAs are resolved from template_id server-side.
Post-deploy smoke checklist: docs/H3_TEMPLATE_I2V_SMOKE.md.
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"message": "MiniMax H3 T2V generation started (6.0 tokens reserved)",
"pre_token_cost": 6.0,
"token_cost": 6.0,
"remaining_tokens": 36.2,
"mode": "t2v",
"reference_count": 0
}
Dedicated status: GET /api/minimax-h3-jobs/{id}
8.5b POST /api/generate/wan3-ref2v
Aliases: POST /api/wan3-ref2v/generate
Wan 3.0 Reference-to-Video. Requires an active Pro subscription. Fixed token billing from size × duration (audio and prompt expansion are free).
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Motion / scene prompt (up to ~20k chars) |
images |
array | Yes* | 1–5 reference images as data-URIs or base64 |
duration |
int | No | 2–30 seconds (default 5; subscribed accounts up to 30) |
size |
string | No | 480p, 720p (default), 1080p |
aspect_ratio |
string | No | 16:9, 9:16, 1:1, 4:3, 3:4 |
audio_enable |
bool | No | Generate synced audio (free). Independent of audios. |
audios |
array | No | 0–3 reference audio files as data-URIs or base64 (audio/mpeg, audio/wav, audio/mp4 M4A, audio/aac, audio/ogg). Max 8 MB and 10 seconds each. Combined duration of all files must be 15 seconds or less. Video is rejected. Omit the field (or send none) to leave audios out of the provider request. Never send an empty list. Not lip-sync; does not change token cost. |
prompt_expansion_enable |
bool | No | Expand prompt server-side (free) |
seed |
int | No | -1 for random |
platform |
string | No | api, web, telegram, kn |
in_app_username |
string | No | Partner end-user label for admin |
result_type |
string | No | url or base64 |
*Multipart image uploads are also accepted. Multipart audio: audio_1 … audio_3 or audios[].
Tokens: max(2, round(duration × rate[size], 2)) — rates 0.88 / 1.76 / 3.52 per second for 480p / 720p / 1080p. Optional job_discounts.wan3_ref2v. Reference audio does not add tokens.
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"message": "Wan 3.0 Ref2V generation started (8.0 tokens used)",
"token_cost": 8.0,
"remaining_tokens": 40.0,
"status_url": "https://funphantom.in/wan3-ref2v-job/uuid"
}
Poll: GET /api/wan3-ref2v-jobs/{id} — completed jobs include video_base64 and API-key video_url (/api/wan3-ref2v/{id}/video).
8.5c POST /api/generate/seedream-i2i
Seedream 5.0 Pro image edit. Requires Pro subscription. Multipart (seedream_image_0 … seedream_image_4 or images) or JSON images as data-URIs/base64. 1–5 images, 4 MB each.
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes* | Edit prompt (*or template_id with stored prompt) |
images |
array | Yes | 1–5 reference/source images |
size |
string | Yes | Exact enum e.g. 1024x1024 (see Image Edit size chips) |
output_format |
string | No | jpg (default) or png |
template_id |
string | No | Image Edit template; prompt pasted server-side if hide_prompt |
Tokens: round(usd × 27, 2) at 2× Siray USD, pack 675 tokens = $50. Default 1.22 per image ($0.045 API). Optional extra-ref USD from admin. Optional job_discounts.seedream_5_pro_i2i.
Poll: GET /api/seedream-jobs/{id} — image: GET /api/seedream-jobs/{id}/image
8.5d POST /api/generate/seedream-ref2i
Seedream 4.5 reference-to-image. Same image payload. Sizes are 2K-only (no 1K). No output_format. Default 1.08 tokens ($0.040). Optional job_discounts.seedream_45_ref2i.
8.6 POST /api/generate/faceswap
Requires active Pro subscription (unless boss account).
| Field | Type | Required | Description |
|---|---|---|---|
target_base64 |
string | Yes | Body/target image (alias: body_base64) |
source_base64 |
string | Yes | Face/source image (alias: face_base64) |
Submit response:
{
"job_id": "uuid",
"status": "submitted",
"token_cost": 1.0,
"remaining_tokens": 35.2,
"status_url": "https://funphantom.in/api/faceswap/uuid"
}
Dedicated status: GET /api/faceswap/{id}
8.7 POST /api/encode/image-mask
Helper to encode source + mask for inpainting. Accepts multipart (image, mask files) or JSON (image_base64, mask_base64).
Response:
{
"success": true,
"image_base64": "…",
"mask_base64": "…",
"image_width": 1024,
"image_height": 1024,
"mask_width": 1024,
"mask_height": 1024,
"image_mime": "image/jpeg",
"mask_mime": "image/png"
}
8.8 POST /api/generate/image-inpaint
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Inpaint prompt |
image_base64 |
string | Yes | Source image (alias: image_1_base64) |
mask_base64 |
string | Yes | White = inpaint region |
negative_prompt |
string | No | Optional |
steps, cfg, seed |
various | No | Sampler params |
Submit response:
{
"success": true,
"job_id": "uuid",
"status": "IN_PROGRESS",
"mode": "inpaint",
"token_cost": 0.5,
"status_url": "https://funphantom.in/image-edit/status/uuid"
}
Poll via unified GET /api/job/{id} (type image_edit).
9. Job Status & Management
9.1 GET /api/job/{id}
Aliases: GET /api/job/{id}/status, GET /api/video-audio/job/{id}
Returns database state only — does not poll RunPod. Poll every 5–10 s until COMPLETED or FAILED.
Common fields (all types):
| Field | Description |
|---|---|
job_id |
UUID |
type |
Job type (see below) |
status |
SUBMITTED, IN_PROGRESS, COMPLETED, FAILED, etc. |
progress |
Estimated 0–100 |
created_at, started_at, completed_at |
ISO timestamps |
error_message |
Set on failure |
token_cost |
Tokens charged |
type: video (in progress)
{
"job_id": "uuid",
"type": "video",
"status": "IN_PROGRESS",
"progress": 45,
"created_at": "2026-09-01T12:00:00",
"started_at": "2026-09-01T12:00:05",
"completed_at": null,
"error_message": null,
"token_cost": 1.2,
"prompt": "a woman smiling…",
"lora_template": "blink_missionary",
"sub_template": null,
"orientation": "portrait",
"width": 512,
"height": 832,
"result_type": "url"
}
type: video (completed)
{
"job_id": "uuid",
"type": "video",
"status": "COMPLETED",
"progress": 100,
"token_cost": 1.2,
"video_url": "https://funphantom.in/video/uuid",
"result_urls": ["https://funphantom.in/video/uuid"]
}
If result_type was base64, completed responses may also include video_base64 or video_base64_error.
type: video_audio
Adds mode: "T2V" or "I2V". Completed jobs include video_url, result_urls, and often video_base64.
type: minimax_h3
{
"job_id": "uuid",
"type": "minimax_h3",
"status": "COMPLETED",
"mode": "t2v",
"duration": 5,
"megapixels": 0.4,
"aspect_ratio": "16:9 (Widescreen)",
"pre_token_cost": 6.0,
"token_cost": 5.8,
"execution_time_ms": 142000,
"billing_adjusted": true,
"video_url": "https://funphantom.in/minimax-h3/uuid",
"result_urls": ["https://funphantom.in/minimax-h3/uuid"],
"video_base64": "data:video/mp4;base64,…"
}
type: image
Adds model_id, guidance, seed, width, height. Completed: image_url, image_base64.
type: image_edit
Completed: image_url, image_base64 (or image_base64_error if file not ready).
type: faceswap
Adds seed, steps, auto_caption. Completed: image_url, image_base64.
9.2 GET /api/minimax-h3-jobs/{id}
Returns the H3 job's to_dict() plus pre_token_cost, billing_adjusted, and video_url when complete.
9.2b GET /api/wan3-ref2v-jobs/{id}
Aliases: GET /api/wan3-ref2v/job/{id}
Completed jobs include video_url (API-key stream at /api/wan3-ref2v/{id}/video) and video_base64 for partner rehosting.
9.3 GET /api/faceswap/{id}
{
"job_id": "uuid",
"status": "COMPLETED",
"token_cost": 1.0,
"seed": 123456789,
"steps": 20,
"auto_caption": false,
"error_message": null,
"created_at": "2026-09-01T12:00:00",
"completed_at": "2026-09-01T12:02:30",
"image_url": "https://funphantom.in/faceswap/uuid/image",
"image_base64": "data:image/jpeg;base64,…"
}
9.4 GET /api/jobs
List jobs across types. Query: page (default 1), per_page (default 20, max 100), status.
Note: Standard users see video, video_audio, and image_edit jobs only. minimax_h3 and faceswap jobs are queryable via unified /api/job/{id} but may not appear in this list.
Response:
{
"jobs": [
{
"id": "uuid",
"type": "video",
"status": "COMPLETED",
"created_at": "2026-09-01T12:00:00",
"token_cost": 1.2,
"video_url": "https://funphantom.in/video/uuid"
}
],
"pagination": {
"page": 1,
"pages": 3,
"per_page": 20,
"total": 45,
"has_next": true,
"has_prev": false
}
}
Non-boss users receive a sanitized field set (id, type, status, timestamps, token_cost, video_url, image_url, mode, etc.).
9.5 GET /api/stats
{
"total_jobs": 120,
"completed_jobs": 98,
"failed_jobs": 5,
"pending_jobs": 17,
"success_rate": 81.67,
"tokens_remaining": 42.5,
"subscription_active": true,
"breakdown": {
"video": { "total": 80, "completed": 70, "failed": 3, "pending": 7 },
"video_audio": { "total": 40, "completed": 28, "failed": 2, "pending": 10 }
}
}
9.6 GET /api/jobs/{id}/settings
Returns reusable settings for a WAN video job (video jobs only).
{
"success": true,
"settings": {
"prompt": "custom prompt if no template",
"lora_template": "blink_missionary",
"sub_template": null,
"duration": 6,
"auto_upscale": false
}
}
10. Delete Endpoints
All require X-API-Key. Returns { "success": true, "message": "…" } on success.
| Method | Path | Description |
|---|---|---|
| DELETE | /api/jobs/delete-all |
Delete all user's jobs |
| DELETE | /api/jobs/{id} |
Delete video job |
| DELETE | /api/jobs/delete/{id} |
Delete video job (alias) |
| DELETE | /api/image-jobs/delete/{id} |
Delete T2I job |
| DELETE | /api/image-edit-jobs/delete/{id} |
Delete image edit job |
| DELETE | /api/faceswap-jobs/delete/{id} |
Delete faceswap job |
| DELETE | /api/video-audio-jobs/delete/{id} |
Delete video+audio job |
| DELETE | /api/minimax-h3-jobs/delete/{id} |
Delete H3 job |
| DELETE | /api/wan3-ref2v-jobs/delete/{id} |
Delete Wan 3.0 job |
| DELETE | /api/image-upscale-jobs/delete/{id} |
Delete upscale job |
11. Catalog & Domain Notes
- API generation does not filter prompts — partners can integrate without domain-specific UX.
- Template catalog: On
funphantom.in, curated filtering applies toGET /templatesandGET /image-edit-templates. - Web UI may apply its own filters separately from the API.
- For the complete catalog, use
nsfw.funphantom.in.
12. Code Examples
Full video generation flow
import time, requests
API_KEY = "fp_…"
BASE = "https://funphantom.in/api"
H = {"X-API-Key": API_KEY, "Content-Type": "application/json"}
# Submit
with open("photo.jpg", "rb") as f:
import base64
b64 = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
r = requests.post(f"{BASE}/generate/video", headers=H, json={
"image_base64": b64,
"lora_template": "blink_missionary",
"duration": 6,
"orientation": "portrait"
})
job_id = r.json()["job_id"]
# Poll
while True:
s = requests.get(f"{BASE}/job/{job_id}", headers=H).json()
if s["status"] in ("COMPLETED", "FAILED"):
print(s)
break
time.sleep(8)
13. FAQ
Does the API use HMAC signing?
No. Only X-API-Key is required.
Does status polling call RunPod?
No. GET /api/job/{id} reads the database. A background worker updates job state.
Are Flow pipeline or standalone upscale available via API? No — those are web-session features only. There are no public API-key endpoints for them.
Does this host filter prompts on generate? No — the API accepts them. Only the template catalog is curated on this host.