Changelog
Track new models, features, and improvements to the FOTOhub API.
September 2026
MAI-Image 2.5 Pro is priced from Microsoft's meter BREAKING
mai-image-2.5-pro billed $0.053 per image. That figure was an estimate: when the model shipped, Microsoft published no price for the MAI-Image family — the pricing page rendered $- and the retail price API exposed the meters under letter codes only.
The meters are now published by name, and one render is $0.108544 — 2.05x the estimate:
| Meter | Rate | Per 1024x1024 image |
|---|---|---|
| Image 2.5 Pro image output | $106.00 / 1M tokens | 1024 tokens = $0.108544 |
| Image 2.5 Pro image input (edits only) | $8.00 / 1M tokens | 1024 tokens = $0.008192 |
| Image 2.5 Pro text input | $5.00 / 1M tokens | ~$0.001 for a 200-token prompt |
Only the image-output leg is charged: the prompt costs less than the wallet's smallest unit, and an edit is billed as a generation.
mai-image-2.5-pronow costs $0.108544 per image from the USD wallet. If you hard-coded the old figure for forecasting, double it.GET /v1/pricingreports it asverified: true— the rate is Microsoft's own list price, not a conversion.mai-image-2.5($0.037) andmai-image-2.5-flash($0.022) are unchanged, as is the credit price of all three on fotohub.app.- The whole family still returns one image per request and still caps at 1,048,576 pixels, so the price is flat across
"1K","2K"and"4K".
Pick mai-image-2.5 when you want the family's look at a third of the cost — Pro buys photorealism, character consistency and spatial reasoning, and Microsoft charges 2.9x for it.
Story Studio scene renders are priced per model BREAKING
POST /v1/story/step/videos starts one clip per storyboard frame — on any of nine models, at any length from 3 to 15 seconds, for up to six scenes — and used to charge one flat $0.535906 for all of it. That figure covered a four-scene story on seedance-1-5 and nothing else: the same request consumes $4.66 on seedance-2-5, and the largest one the route accepts (six 15-second scenes on 2.5) consumes $20.86.
Scene renders are now billed at the provider's own rate — per model, per second, per scene — from the same table /v1/ai/generate/video bills from:
video_model | Per 5 s scene | 4-scene story |
|---|---|---|
seedance-1-5 | 0.130680 | 0.522720 |
seedance-2-0-mini (default) | 0.381150 | 1.524600 |
veo-3-1-fast | 0.320000 | 1.280000 |
wan / happyhorse | 0.500000 | 2.000000 |
seedance-2-0-fast | 0.609840 | 2.439360 |
seedance-2-0-pro | 0.762300 | 3.049200 |
veo-3-1 | 0.800000 | 3.200000 |
seedance-2-5 | 1.165230 | 4.660920 |
What to change in an integration:
video_modelnow decides your bill. Readcost_usdoff the step 4 response rather than assuming a fixed line item, and pickseedance-1-5if price is the constraint — it is 3x cheaper than the default and 9x cheaper thanseedance-2-5.story_step_videosis no longer a price key and has leftGET /v1/pricing. The ledger now labels each chargestory_step_videos:<model>, so a charge names the model that caused it.story_step(0.267953),story_regenerate(0.160772) andstory_full(1.607717) are unchanged.- A duration snaps down onto the model's own ladder.
duration_per_scene: 5on a Veo model is a four-second clip, billed as four seconds — Veo renders 4, 6 or 8 and nothing else. - You are only charged for scenes that render. A scene whose keyframe failed in step 3 is never submitted and never quoted; anything the provider refuses is refunded against the same operation the moment step 4 returns.
POST /v1/story/generatecharges its estimate up front and reports any refund in a newevent: billingframe carryingrefunded_usd,scenes_renderedandscenes_requested. POST /v1/story/step/poll-videos— new, free, and the only way to get real clip URLs out of the step path. Poll it untilpendingis0before calling step 5 or 6.
Nine models are now selectable (seedance, seedance-2-0-mini, -fast, -pro, seedance-2-5, seedance-1-5, veo-3-1-fast, veo-3-1, wan, happyhorse). hailuo is retired — still accepted so live integrations do not start failing, but it renders on the default model. Full reference: Story Studio.
August 2026
Wallet top-up packages & volume bonus NEW
Twelve fixed top-up packages, and every one from $500 up pays a volume bonus in dollars credited to your wallet — not credits, not a discount code.
| Pay | Bonus | Credited |
|---|---|---|
| $15 / $25 / $60 / $120 | — | same |
| $500 | +5% | $525 |
| $1,000 | +10% | $1,100 |
| $2,000 | +12% | $2,240 |
| $3,000 | +13% | $3,390 |
| $5,000 | +15% | $5,750 |
| $7,500 | +17% | $8,775 |
| $10,000 | +18% | $11,800 |
| $15,000 | +20% | $18,000 |
A custom amount_usd earns the same ladder — $2,500 lands on the $2,000 rung and is credited $2,800. The bonus is floored to the cent, so the figure quoted before checkout is never above the figure granted after it. Nothing expires: a topped-up balance stays until you spend it.
Read the amount you actually received from total_credited_usd on the POST /v1/tiers/wallet/topup response, not from what you paid. (On the catalog, GET /v1/billing/topup/packages, the same figure per package is total_usd — that one is a quote, not a receipt.) The catalog is public, needs no key, and publishes the ladder itself as bonus_tiers alongside min_usd: 10 and max_usd: 15000. See Get Top-Up Packages.
Package slugs are not amounts
The four starter slugs are pre-USD names: topup-50 is $15, topup-100 is $25, topup-250 is $60, topup-500 is $120. The scale-* slugs do match their amounts (scale-1000 = $1,000). Send the slug, never the amount, as package.
API subscriptions retired BREAKING
POST /v1/tiers/subscribe now answers HTTP 410 for every tier, with use_instead: "POST /v1/tiers/wallet/topup". There is no paid API plan any more — the API is prepaid in USD, and rate limits are derived from your wallet balance and lifetime spend.
What this changes if you integrated against it:
GET /v1/billing/plansreturns{"plans": []}. Still a 200; simply nothing to iterate.GET /v1/tiers/compareno longer carriesprice_monthlyormonthly_credits(they quoted PLN prices for plans nobody can buy). It now statescurrency: "USD",billing_model: "prepaid_wallet_usd",subscriptions_retired: true, and marks each rowpurchasable: falsewith anupgrade_pathof"wallet_topup"or, forsub-enterprise,"contact_sales".GET /v1/tiers/catalogstill publishes itssubscriptionsarray, because those rows are live rate-limit definitions for accounts that already held asub-*tier. They are flaggedpurchasable: false,legacy: true.bonus_credits→bonus_usdon every top-up response. The field never described credits; the wallet has only ever been in dollars.- Out of funds is
402 insufficient_funds, carryingrequired_usd,balance_usd,shortfall_usdandcharged: false— a 402 moves no money and calls no provider. See 402 Payment Required.
To raise your limits, fund the wallet.
Credit figures in older entries below
Entries before this one price models in credits. That is the fotohub.app web app's unit and it does not apply to the API: an API call is charged in USD from the prepaid wallet at the provider's own rate, 1:1. A key holding web-app credits and a $0 wallet gets a 402. Current USD rates are on Model Pricing.
Registered face deletion & retention NEW
A registered virtual portrait (POST /v1/ai/assets/register) is biometric data, and it can now be erased on demand instead of only being written, never removed:
DELETE /v1/ai/assets/{asset_id}— deletes the face at the provider and records the erasure locally. Idempotent (already_deleted: trueon a repeat call);404if the asset is not yours;502— safe to retry — if the provider delete failed, in which case nothing was recorded as deleted.retention_hours(optional, 1-8760) onPOST /v1/ai/assets/register— the asset self-deletes once it elapses. A background sweep runs every 15 minutes, so expiry is eventually consistent shortly afterexpires_at, not exact to the second. Omit it to keep the face until you delete it.GET /v1/ai/assetsandGET /v1/ai/assets/{asset_id}now also returnretention_hours,expires_at, andpurged_at.
See Managing registered faces for the full reference and response shapes.
Storage bucket region field NEW
POST /v1/buckets and PATCH /v1/buckets/:id now surface region explicitly:
POST /v1/bucketsaccepts an optionalregion, but"eu"is the only value FOTOhub-managed storage accepts (default when omitted) — these buckets are stored ineu-central-1. Anything else is a400pointing you at output destinations for residency outside the EU.PATCH /v1/buckets/:idrejectsregionoutright with a400: it records where the bytes already live, and a bucket cannot be relabelled into a different region without moving the data.GET /v1/bucketsandGET /v1/buckets/:idincluderegionon every row.
This does not affect S3 Enterprise (/v1/storage/s3/*), which already provisions real AWS buckets across 16 regions — see Available Regions.
Seedance 2.5 NEW
seedance-2-5 — the longest single-request clip on the platform, and the first model that takes an existing video as input.
- 4-30 seconds in one request (every integer in range; nothing else reaches past 15s)
- Native audio included — the per-second rate is identical with audio on or off
- 480p / 720p, 24 fps,
mp4ormovoutput - 14.5 credits/s at 720p, 6.4 at 480p — a 30s 720p clip is 435 credits, a 5s 480p draft is 32
- Video-to-video editing and extension — attach a source clip and describe the change
- Up to 30 image + 10 video + 10 audio references, plus reusable
asset_idsfor face consistency
Note: 2.5 is not a superset of seedance-2-0-pro. It reaches 30 seconds but stops at 720p; 2.0 Pro reaches 4K but stops at 15 seconds. Pick per shot.
See the Seedance 2.5 reference for the full parameter set, the task types that lock aspect_ratio/duration, and editing examples. SDK support: client.generate_seedance() / client.generateSeedance() handles submit + poll transparently.
July 2026
IDA Q 1.0 NEW
FOTOhub's first proprietary image generation model, self-hosted on our own GPU infrastructure.
- Top-5 worldwide on the DesignArena Elo benchmark, ahead of Recraft, Krea 2, FLUX.2, Seedream, and Imagen 4 Ultra
- Best-in-class text rendering — clean headlines, labels, and signage
- Native multilingual prompts — automatic translation and scene restructuring for any input language, powered by FOTOhub's own prompt engine
- Priced at 0.5 credits/request (≈ $0.027 if billed from your USD wallet) — the cheapest image model in the catalog
- Asynchronous by design — single-GPU global queue, submit + poll pattern (30s–3.5min depending on resolution)
- SDK support:
client.generate_ida_q()/client.generateIdaQ()in Python & TypeScript — handles submit + poll transparently
See the IDA Q 1.0 API Reference for full documentation.
Veo 3.1, Veo 3.1 Fast, Gemini Omni Flash & Grok Video 1.5 NEW
Four new video models added to the catalog:
veo-3.1-generate-001("Veo 3.1") — Google's highest-quality video model. Native audio, up to 4K resolution, last-frame + reference-image support. 12 credits/second.veo-3.1-fast-generate-001("Veo 3.1 Fast") — Faster, lower-cost Veo 3.1 tier with native audio. 5 credits/second.gemini-omni-flash("Gemini Omni Flash") — Native audio generated automatically on every clip, no separate surcharge tier. 6 credits/second.grok-imagine-video-1.5("Grok Video 1.5") — The only generative video model with built-in lip-sync (portrait + script → talking head). 9 credits/second.
See the Video Generation Models catalog for full pricing across every provider.
Gabriel AI Orchestrator NEW
Full-featured AI orchestrator with natural language routing, prompt enhancement, and inline suggestions.
- 5 endpoints: classify, stream, suggest, recommend, translate
- Intelligent routing: "make a photo of a cat" → image generation, "create a video" → video generation
- Prompt enhancement: model-aware prompt optimization (Seedream, Seedance, FLUX, WAN architectures)
- Real-time suggestions: <50ms autocomplete as you type
- Proactive tips: context-aware recommendations based on credits, brand state, and usage history
- SDK support:
client.gabriel_classify()/client.gabrielClassify()in Python & TypeScript
Usage & Analytics API NEW
Real-time monitoring and cost analytics for all API operations.
- Per-model, per-endpoint, per-key cost breakdown
- Daily/weekly/monthly trend data
- Anomaly detection alerts
- Custom date range queries
Seedance Video UPDATED
Next-generation Seedance video generation now available under the seedance-2-0-pro model ID:
- High-quality, cinematic output
- Fast turnaround for social-format clips
- Billed at 47 credits per 5-second segment
Dola SeedDream 5.0 Pro UPDATED
Latest SeedDream variant with improved prompt following, better text rendering, and enhanced photorealism. 3 credits per image.
June 2026
Tier System v2 NEW
Complete billing overhaul with wallet-based pricing:
- PAYG auto-resolution (free → developer → startup based on usage)
- Wallet with auto-topup
- Per-project hard spending limits
- 4-hour burst allowances
- Enterprise tier with custom SLAs
Brand Assets System NEW
Upload and manage brand assets (logos, colors, fonts) for brand-consistent AI generation.
Veo 3.0 Improvements UPDATED
Improved temporal coherence for Google's Veo 3 video model. Note: this entry originally referred to "Veo 3.1" and listed a flat 15-credit generation cost — that was inaccurate. The real veo-3.1-generate-001 (12 credits/second, native audio, up to 4K) shipped in July 2026; see the entry below.
May 2026
FLUX 2 Models NEW
Full FLUX 2 lineup: Pro, Max, Flex, Klein 4B/9B. Best-in-class for artistic and creative generation.
Grok Video & Image NEW
xAI's Grok-powered generation models added to the catalog.
Webhook System UPDATED
HMAC-SHA256 signed webhooks with 3x retry, exponential backoff, and delivery logs.
Earlier
See the full API reference for comprehensive endpoint documentation.

