Changelog

Notable Releases

September 2026

  • Async media stops failing you quietly. A video or music job whose only sellers are listed against a host that cannot run that endpoint now returns 404 no_sellers_for_model up front, instead of being accepted, charged and failed later; those offers are being removed from the marketplace. Both async endpoints now document their full error table, including which failures are retryable. See Video Generations and Music Generations.
  • One prepaid balance, reported the same everywhere. GET /v1/buyer/me reports credit_balance_usdc as your whole spendable prepaid balance — fiat credit plus deposited USDC — the same figure /v1/payments/balance already returned. Deposited USDC can also fund video and music jobs, which previously saw only fiat credit and could refuse a funded buyer.
  • OpenAI-backed image edits work. Edits routed to OpenAI were rejected by the provider because we sent the wrong field shape. POST /v1/images/edits now works on those models; nothing about the request you send changed. See Image Generations → Image-to-Image.
  • Unknown image sizes no longer error internally. An unrecognized size used to be able to fail the price estimate outright; it is now handled cleanly.
  • Latency and uptime on the offers table: expanding a model on the Markets page now shows each offer's provider latency (median time to first token) and uptime over the trailing 24 hours, both sortable. - means not enough data. See Provider Performance.
  • Model latency, uptime, cache hit rate and throughput on the catalog list: every row of GET /api/markets now carries ttft_p50_ms, the model's median time to first token over the trailing 24 hours across all of its providers (with ttft_samples beside it), uptime_pct over the same window, cache_hit_rate_pct, the share of input tokens served from the prompt cache, and tps_p50, the median output tokens per second while streaming. The per-provider performance endpoint gains tps_p50 and tps_samples too. null means not enough data to measure, never zero. See Market Data.
  • Per-request cost on your API key: buyer API keys can read the exact settled cost of their own requests, and /v1/chat/completions returns a settlement request id so a streamed request's final cost is retrievable once the stream ends.
  • Public provider performance and benchmarked discounts: each model's marketplace page shows measured per-provider performance, and every displayed discount is benchmarked against live upstream list prices. See Provider Performance.
  • Routing controls: pin a request to a chosen set of providers, and set a per-key minimum-discount floor (replacing the older price ceiling) so a key only routes to offers at or above the saving you require. See Routing Controls and Minimum-Discount Routing.
  • Cache and reasoning in usage analytics: usage now breaks out cached input tokens and reasoning tokens per request, so token mix and cost are visible at a glance. See Reasoning Controls.
  • Streaming keep-alive: long generations stay connected while a provider is briefly silent, so a slow but valid response no longer times out mid-stream.
  • Marketplace filters: the marketplace has buyer-facing filters and a dedicated mobile filter view for narrowing the model list without leaving the page.

August 2026

  • Reasoning delivered and billed correctly, end to end: reasoning content is relayed across both the OpenAI and Anthropic wires and in both directions, reasoning tokens are persisted for billing and analytics, and Gemini reasoning survives multi-turn tool calls. See Reasoning Controls.
  • No charge for undelivered output: in-band provider stream faults are detected mid-stream, so a request that delivers zero output tokens is not billed.
  • Organizations: roles and permissions are explained in-product, with documentation for members, workspaces, wallets, API keys, and organization analytics. See Organizations.
  • API-first key management: buyer and seller keys can be created, rotated, and managed entirely over the API. See Buyer Endpoints and Seller Endpoints.
  • One active offer per credential, base URL, and model: duplicate seller offers are now rejected across every workspace, so the same credential cannot be listed against the same model twice.

July 2026

  • Image-to-image editing: new POST /v1/images/edits endpoint: edit an existing image with a text prompt using an edit-capable model (e.g. nano-banana-2-edit, qwen-image-2-edit). POST /v1/images/generations runs the same edit flow when the body carries a source image (image_url, input_images, or a data: URI). Masked/inpaint edits are not supported yet. See Image Generations → Image-to-Image.
  • Image-to-video: POST /v1/video/generations accepts a start frame (image_url), a transition end_image_url, and multi-image input_images (roles start/end/reference). Image-to-video-only models require a source image. See Video Generations → Image-to-Video.
  • Multi-image inputs: both surfaces accept up to 8 source images via input_images (strings or { url, role } objects). On images, the first entry is the base and the rest are reference/edit layers; on video, untagged entries are positional ([start] or [start, end]) and further images take explicit roles. Sources are https:// URLs or data: URIs; URLs are passed to the provider as-is and never fetched by the marketplace.

June 2026

  • Multi-provider pinning: the provider hint on /v1/chat/completions now accepts an array (an allow-list), e.g. "provider": ["zai", "openrouter"], routing to the cheapest healthy offer among the listed providers. A single string still works unchanged. Unrecognized providers are dropped; if every pinned provider is unrecognized the request returns 400 unsupported_provider (a supported provider with no offer for the model still returns 404 no_sellers_for_model). See Chat Completions → Provider Pinning.
  • API moved to AWS: the API base host is now https://api.surplusintelligence.ai. Inference endpoints live under /v1/* (e.g. /v1/chat/completions, /v1/models, /v1/prices), markets under /api/markets, and account endpoints under /v1/buyer/* and /v1/seller/*. Update your base_url to https://api.surplusintelligence.ai/v1. The legacy dedicated fallback-key endpoint was retired; register a catch-all provider with model: null via POST /v1/buyer/providers instead.

April 2026

  • Bankr LLM Gateway: 32 models at 0.05x cost, self-sustaining auto top-up loop (PRs #55-57)
  • External wallet auth fix: Rainbow, WalletConnect now create inference sessions (PR #60)
  • GLM 5.1 added to model registry (PR #59)
  • $500/day giveaway launched

March-April 2026

  • Model naming unification: single source of truth introduced with 58 models / 8 providers at the time (PRs #19-26). Current live counts are higher; use /v1/models and /api/markets for current numbers.
  • Tool format normalization: Cursor full compatibility (PRs #29, 31)
  • x402 + MPP payment rails: agents can pay per-request
  • ACP v2 (Virtuals Protocol): agent-to-agent commerce
  • Priority Provider (BYOK): use your own key + marketplace overflow
  • CSV usage export for buyers
  • Payout address feature for sellers

February-March 2026

  • Settlement contract deployed on Base
  • 187 tests (unit + integration)
  • 10 provider integrations with automatic pricing discovery
  • Multi-key support: up to 25 keys per wallet