What's Changed
🤝 Team Management: Invite teammates, manage permissions, and collaborate in one place
📊 Admin Dashboard: New metrics and insights for better usage visibility
🎯 Improved Routing: Smarter provider routing based on real-time uptime and latency
💰 Referral System: Earn 1% of your referrals’ spend
Read the full changelog here: https://llmgateway.io/blog/q4-2025-roundup
Full Commit History
- feat(db): add index for logs table by projectId and createdAt by @steebchen in #905
- feat(models): add discount field by @steebchen in #894
- refactor(worker): use regular DB client consistently by @steebchen in #906
- feat(db): add indexes by @steebchen in #907
- feat(worker): add shutdown logic by @steebchen in #908
- fix(gateway): improve error message for IAM rule failure by @steebchen in #909
- feat(models): limit cache control blocks by @steebchen in #910
- feat(ui): add testimonials section and integrate react-tweet component by @smakosh in #911
- chore(models): deactivate Claude 3.5 by @steebchen in #912
- fix(cost-estimation): fix zero output tokens by @steebchen in #913
- feat(anthropic): implement SSE handler for streaming responses by @steebchen in #922
- chore(deps): bump drizzle-zod from 0.7.1 to 0.8.3 by @dependabot[bot] in #918
- chore(deps): bump lucide-react from 0.488.0 to 0.544.0 by @dependabot[bot] in #920
- feat(models): add support for Gemini 2.5 Flash Lite by @steebchen in #923
- feat(models): add GPT-5 series, Gemini, and Deepseek models with Routeway discount by @steebchen in #925
- feat(models): add minimal reasoning effort by @steebchen in #929
- fix(model-pricing): parse discount variable by @steebchen in #930
- refactor(activity-log): use db aggregation by @steebchen in #924
- fix(models): refactor temperature handling for GPT-5 by @steebchen in #933
- feat(LogCard): add token timing metrics by @steebchen in #934
- feat(model-providers): add discount display by @steebchen in #936
- feat(logs): add model filtering by @steebchen in #937
- fix(zai): set maxOutput for glm-4.5v by @steebchen in #938
- feat: new chat playground by @smakosh in #928
- chore(deps): bump pretty-bytes from 7.0.0 to 7.0.1 by @dependabot[bot] in #944
- chore(deps-dev): bump openapi-typescript from 7.8.0 to 7.9.1 by @dependabot[bot] in #942
- chore(deps): bump better-auth from 1.2.7 to 1.2.10 in /apps/playground by @dependabot[bot] in #946
- fix: include provider in cache key for uniqueness by @steebchen in #947
- feat(playground): update dependencies and enhance chat UI by @smakosh in #948
- feat(google): add deactivation dates and vision support by @steebchen in #954
- feat(models): add new Gemini 2.5 flash preview model by @steebchen in #950
- feat(models): add Gemini 2.5 model by @steebchen in #951
- fix: chat width and spam issue by @smakosh in #955
- feat(logging): add Hono logger in API and Gateway by @steebchen in #956
- chore(deps): bump better-auth from 1.2.7 to 1.2.10 in /apps/api by @dependabot[bot] in #953
- feat(infra): migrate Dockerfiles to asdf v0.18.0 by @steebchen in #957
- feat(infra): enhance Dockerfile with mount caching by @steebchen in #960
- feat(infra): use turbo build in split dockerfile by @steebchen in #961
- feat(api): migrate OpenAPI generator script to TypeScript by @steebchen in #962
- feat: add image compression workflow by @steebchen in #966
- refactor(docs): update dependencies and optimize text processing by @steebchen in #967
- feat(docs): improve docs features with n8n guide by @steebchen in #959
- feat(infra): migrate Next.js apps to standalone output by @steebchen in #963
- refactor: use bun at runtime in all images by @steebchen in #969
- feat(models): add Claude Sonnet 4.5 model to Anthropic lineup by @steebchen in #971
- feat: github oauth by @steebchen in #972
- feat(models): add new claude-sonnet-4-5 with discount by @steebchen in #980
- feat(google): add reasoning and thinkingBudget support by @steebchen in #982
- chore(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #977
- feat(models): add GLM-4.6 model configuration by @steebchen in #981
- refactor(gateway): loads of improvements by @steebchen in #984
- fix(models): filter out unstable and experimental providers by @steebchen in #987
- feat(models): add NanoGPT provider configuration by @steebchen in #985
- feat(db): add OpenTelemetry instrumentation by @steebchen in #988
- fix(tests): filter TEST_MODELS by provider correctly by @steebchen in #989
- chore(package): clean up pnpm workspace config by @steebchen in #986
- fix(gateway): log initial requested model ID by @steebchen in #990
- chore(deps-dev): bump @steebchen/eslint-config from 1.10.0 to 1.10.1 by @dependabot[bot] in #974
- feat(playground): add playground API routes and UI components by @smakosh in #992
- feat(models): add comparison page by @steebchen in #949
- fix(models): update pricing and add test skip flags by @steebchen in #993
- chore(deps): bump the react group across 1 directory with 4 updates by @dependabot[bot] in #996
- chore(deps): bump better-auth from 1.2.7 to 1.3.24 by @dependabot[bot] in #995
- chore: upgrade Turbo to 2.5.8 and refresh lockfile by @steebchen in #999
- feat(auth): integrate otel-better-auth by @steebchen in #1000
- fix(MagicTweet): remove unused prop by @steebchen in #1001
- chore(deps): bump nodemailer and @types/nodemailer by @dependabot[bot] in #997
- chore(deps): bump next from 15.5.2 to 15.5.4 in the next group by @dependabot[bot] in #975
- feat(models): add AWS Bedrock provider and model support by @steebchen in #991
- feat(models): add Bedrock Llama models by @steebchen in #1007
- feat(docs): add metadata configuration & adapt favicons by @steebchen in #1008
- chore: optimize images by @steebchen in #1009
- feat(gateway): add json_schema response format by @steebchen in #1010
- feat(models): prioritize paid models in cheapest model selection by @steebchen in #1011
- feat(tooltips): dark-mode friendly custom tooltips across charts by @steebchen in #1013
- feat(logging): add
responseFormatsupport for logs by @steebchen in #1014 - feat(chat): upgraded next and added support for image gen by @smakosh in #1005
- chore(dependencies): move otel-better-auth to api by @steebchen in #1015
- chore(deps): bump better-auth from 1.3.25 to 1.3.26 by @dependabot[bot] in #1002
- feat(docs): enhance image generation documentation with AI SDK examples by @smakosh in #1016
- chore(deps): bump @ai-sdk/react from 2.0.44 to 2.0.61 by @dependabot[bot] in #1020
- chore(deps): bump fumadocs-mdx from 12.0.1 to 12.0.3 by @dependabot[bot] in #1019
- chore(deps-dev): bump the react group with 2 updates by @dependabot[bot] in #1017
- feat(anthropic): add Claude Haiku 4.5 model by @steebchen in #1023
- feat(ui): add enterprise page and make new chat playground available by @smakosh in #1024
- feat(models): mark models as unstable in routeway discount provider by @steebchen in #1029
- fix(models): mark routeway free models unstable by @steebchen in #1031
- feat(chat): handle empty responses and mark them as upstream errors by @steebchen in #1032
- feat(chat): add reasoning field to messages and update UI components by @smakosh in #1033
- feat(models): add CanopyWave provider by @steebchen in #1030
- feat(model-selector): add stability filter by @steebchen in #1035
- fix(logger): disable in production by @steebchen in #1036
- feat(UI): improve mutation error handling by @steebchen in #1037
- feat(playground): add image gen suggestions by @steebchen in #1034
- feat(changelog): add CanopyWave partnership announcement with 90% discount on DeepSeek v3.1 by @smakosh in #1039
- feat(team): implement team management features by @steebchen in #1028
- docs(reasoning): add docs for reasoning and guidelines by @steebchen in #1047
- chore(deps-dev): bump vite from 6.3.6 to 6.4.1 by @dependabot[bot] in #1040
- chore(deps): bump actions/setup-node from 5 to 6 by @dependabot[bot] in #1041
- chore(deps): bump nodemailer from 7.0.6 to 7.0.9 by @dependabot[bot] in #1045
- chore(deps-dev): bump @types/react-dom from 19.2.1 to 19.2.2 in the react group by @dependabot[bot] in #1042
- test(gateway): update auto-routing reasoning_effort test by @steebchen in #1049
- fix(costs): update discount calculation to use multiplier by @steebchen in #1048
- chore(deps): bump steebchen/actions from 0.14.1 to 0.16.0 by @dependabot[bot] in #1022
- chore(deps-dev): bump vite from 6.3.6 to 7.1.10 by @dependabot[bot] in #1046
- chore(deps-dev): bump vite from 7.1.10 to 7.1.11 by @dependabot[bot] in #1051
- refactor(layout): improve dashboard layout structure by @steebchen in #1050
- fix(chat): emit upstream_error event and DONE on empty streaming response by @steebchen in #1053
- chore(deps): bump hono from 4.9.7 to 4.10.2 by @dependabot[bot] in #1054
- feat(organization): add billing email management and update schema by @steebchen in #1052
- fix(playground): prevent duplicate API key calls by @smakosh in #1055
- refactor(prepare-request): streamline default handling by @steebchen in #1057
- feat(ui): show filtered counts for models/providers by @steebchen in #1058
- feat(ui): add JSON Output filter and chip by @steebchen in #1059
- feat: add azure support by @steebchen in #1006
- feat(api): mask provider key tokens in creation response by @steebchen in #1060
- feat(api): simplify jsonOutputSchema checks by @steebchen in #1064
- test(e2e): refine model stability checks by @steebchen in #1065
- fix(model): exclude experimental stability in gateway filters by @steebchen in #1066
- feat(brevo): update contact handling on onboarding and social login by @steebchen in #1062
- feat(core): enable json_schema output for Deepseek v3.1 by @steebchen in #1063
- chore(deps): bump hono from 4.10.2 to 4.10.3 by @dependabot[bot] in #1067
- chore(dependencies): ugrades and team members changelog update by @smakosh in #1069
- refactor(model): per-provider jsonOutput flag across mappings by @steebchen in #1068
- refactor(provider-mapping): move deactivatedAt and deprecatedAt to mappings by @steebchen in #1071
- feat: add google-vertex provider support by @steebchen in #1070
- chore(models): deactivate Nebius on 2025-11-03 by @steebchen in #1072
- feat(brevo): add onboarding status to Brevo and conditional updates by @steebchen in #1073
- refactor(ui): centralize global mutation error handling by @steebchen in #1074
- feat(costs): include reasoning tokens in cost calculations by @steebchen in #1076
- feat(playground): add group chat functionality and turbopack support by @smakosh in #1078
- feat(api): add no_reasoning flag by @steebchen in #1080
- feat(emails): add transactional emails for trial start and cancellation by @steebchen in #1079
- feat(preferences): add org name editing by @steebchen in #1081
- feat(playground): redirect to original URL after signin by @smakosh in #1083
- feat(playground): integrate GitHub MCP tools and enhance chat functionality by @smakosh in #1097
- chore(deps-dev): bump esbuild-fix-imports-plugin from 1.0.22 to 1.0.23 by @dependabot[bot] in #1085
- chore(deps): bump @hono/swagger-ui from 0.5.1 to 0.5.2 by @dependabot[bot] in #1086
- chore(deps): bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #1089
- chore(deps): bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #1090
- chore(deps): bump steebchen/actions from 0.16.0 to 0.17.0 by @dependabot[bot] in #1092
- feat(chat): restrict auto chat to JSON providers by @steebchen in #1098
- revert(feat/chat): restrict auto chat to JSON providers by @steebchen in #1099
- fix(lint): resolve unused props by @steebchen in #1101
- fix: mono font by @smakosh in #1105
- fix(tests): model deactivation filtering by @steebchen in #1107
- chore(deps): bump turbo by @steebchen in #1100
- chore(deps): bump posthog-node from 5.8.2 to 5.10.4 by @dependabot[bot] in #1112
- chore(deps-dev): bump vitest from 3.2.3 to 4.0.5 by @dependabot[bot] in #1110
- chore(deps): bump next from 15.5.4 to 16.0.1 in the next group by @dependabot[bot] in #1108
- feat(billing): use inputPrice fallback by @steebchen in #1114
- feat(models): provide 10% off zai models by @steebchen in #1106
- feat(models): launch 20% discount on google models by @steebchen in #1115
- feat(gateway): customize upload limit by @steebchen in #1116
- fix(gateway): return correct finish reason for google content filter by @steebchen in #1117
- fix(google): adapt safety settings by @steebchen in #1118
- fix: handle invalid tool calls by @steebchen in #1119
- fix(auto-routing): filter providers by @steebchen in #1120
- feat(billing): generate and email PDF invoices for subscriptions and credits by @steebchen in #1088
- feat(models): set routeway-discount as stable by @steebchen in #1121
- fix(models): mark some models as unstable by @steebchen in #1122
- fix(enterprise): contact form layout by @smakosh in #1123
- fix: handle fetch timeouts by @steebchen in #1125
- fix(models): make google preview models work by @steebchen in #1126
- fix(google): use global by default by @steebchen in #1128
- feat(moonshot): add Kimi K2 model by @steebchen in #1127
- fix(billing): correct Stripe fee calculation by @steebchen in #1130
- feat(changelog): announce kimi-k2-thinking by @smakosh in #1131
- feat: expand canopywave models by @steebchen in #1132
- fix: enable reasoning for canopywave models by @steebchen in #1133
- fix: downgrade ai sdk to stable version to fix mcp write calls by @smakosh in #1137
- feat: show deprecated and hide deactivated models by @smakosh in #1138
- feat: add kimi-k2-thinking via canopywave by @steebchen in #1144
- chore(deps): bump the drizzle group with 2 updates by @dependabot[bot] in #1139
- chore(deps): bump the radix group with 5 updates by @dependabot[bot] in #1140
- chore(deps): bump zod-openapi from 4.2.4 to 5.4.3 by @dependabot[bot] in #1141
- chore(deps): bump @opentelemetry/sdk-trace-base from 2.1.0 to 2.2.0 by @dependabot[bot] in #1143
- feat(invoice): add company address by @steebchen in #1145
- chore(deps): bump @modelcontextprotocol/sdk from 1.20.2 to 1.21.0 by @dependabot[bot] in #1142
- feat(llm): add multi-API key support by @steebchen in #1147
- chore: upgraded docs by @smakosh in #1149
- feat(retention): add data limits by @steebchen in #1148
- feat: add support for gpt-5.1 by @smakosh in #1150
- feat(worker): implement parallel processing loops for tasks by @steebchen in #1151
- fix(error): handle content filter detection in error messages by @steebchen in #1153
- fix(chat): improve reasoning token estimation logic by @steebchen in #1155
- feat: add responses API support for gpt-5-pro and gpt-5.1-codex by @steebchen in #1154
- fix(chat): refine error logging for provider responses by @steebchen in #1157
- chore(guides): cursor guide by @smakosh in #1158
- feat(zai): add sensitive word check parameter support by @steebchen in #1159
- feat: sherlock stealth models by @steebchen in #1160
- feat(rate-limit): add free models rate limit tiers by @steebchen in #1161
- feat(google): enable reasoning option for more models by @steebchen in #1162
- feat(sherlock): add new stealth models and update provider icons by @smakosh in #1163
- chore(deps-dev): bump tsc-watch from 7.1.1 to 7.2.0 by @dependabot[bot] in #1168
- chore(deps): bump redis from 5.8.2 to 5.9.0 by @dependabot[bot] in #1167
- chore(deps-dev): bump the react group with 2 updates by @dependabot[bot] in #1165
- chore: update migrations by @steebchen in #1170
- feat(billing): add top up credits button by @steebchen in #1169
- feat(google): add Gemini 3 Pro (Preview) model configuration by @steebchen in #1171
- feat(ui): added new changelog for gemini 3 pro release by @smakosh in #1172
- fix(chat): add 'required' option to tool_choice union by @steebchen in #1175
- feat(config): add VertexAI keys by @steebchen in #1178
- feat(google): add conversion for OpenAI JSON schema format by @steebchen in #1179
- feat(models): display exact prices by @steebchen in #1180
- feat(gateway): add uptime & latency metrics by @steebchen in #1146
- feat(logs): add routing metadata by @steebchen in #1181
- feat(routing): add metadata by @steebchen in #1182
- chore: mark Azure unstable by @steebchen in #1183
- feat: add Grok 4.1 model support by @steebchen in #1185
- fix(ui): routing score display by @steebchen in #1187
- feat(google): add Gemini 2.5 Flash Image regular model by @steebchen in #1192
- fix: use Decimal.js for cost calculations by @steebchen in #1193
- feat: add real-time current minute history calculation by @steebchen in #1194
- feat(pricing): implement tiered pricing structure for models by @steebchen in #1188
- feat(google): add Gemini 3 Pro Image Preview model by @steebchen in #1195
- feat(models): add GPT-5.1 Codex mini model by @steebchen in #1199
- fix(tests): log model by @steebchen in #1201
- feat(token-usage): enhance token estimation for images by @steebchen in #1202
- fix(models): deactivate sherlock models by @steebchen in #1203
- feat(models): add descriptions to all models by @steebchen in #1206
- feat(costs): adapt image output pricing and tracking by @steebchen in #1207
- feat(ui): show model description on detail page by @steebchen in #1208
- feat(costs): update image token calculation based on size by @steebchen in #1210
- feat(chat): enhance chat functionality with image configuration and reasoning effort options by @smakosh in #1211
- feat(models): add image pricing by @steebchen in #1212
- fix(tests): skip deactivated providers by @steebchen in #1213
- feat(tests): make TEST_MODELS override test skip by @steebchen in #1205
- feat(ui): update labels & icons by @steebchen in #1214
- fix(auto-route): remove duplicate model by @steebchen in #1215
- feat(request): strip unsupported properties from JSON schema by @steebchen in #1216
- perf: optimize data retention cleanup query by @steebchen in #1217
- perf: remove OR conditions from cleanup query by @steebchen in #1218
- feat: add canonical metadata to UI and docs by @steebchen in #1219
- feat(metrics): add throughput and enhance metric calculations by @steebchen in #1223
- perf: optimize partial index for cleanup query by @steebchen in #1221
- feat: implement referral system with 1% earnings by @steebchen in #1224
- feat(ui): clarify model display in log cards by @steebchen in #1225
- fix(logs): handle queue errors by @steebchen in #1226
- fix: update sender name by @steebchen in #1227
- feat: optimize unique-models & filter providers by @steebchen in #1228
- feat: remove Sherlock provider by @smakosh in #1229
- feat: route away from low-uptime providers by @steebchen in #1230
- feat: add uptime-aware routing for multiple API keys by @steebchen in #1231
- feat: add releasedAt and publishedAt date fields by @steebchen in #1232
- feat: update free model configurations by @steebchen in #1234
- refactor: centralize provider env var definitions by @steebchen in #1233
- feat(models): support opus-4.5 by @smakosh in #1236
- feat(api): add unsupported message by @steebchen in #1242
- chore(deps): bump hono-openapi from 0.4.8 to 1.1.1 by @dependabot[bot] in #1240
- chore(deps): bump @content-collections/next from 0.2.8 to 0.2.9 by @dependabot[bot] in #1241
- chore(deps-dev): bump @types/react from 19.2.4 to 19.2.6 in the react group by @dependabot[bot] in #1238
- feat(api): add effort parameter support for claude-opus-4-5 by @steebchen in #1244
- feat: add discount savings visualization on dashboard by @steebchen in #1245
- test(activity): add comprehensive unit tests by @steebchen in #1246
- feat(models): add JSON output info by @steebchen in #1249
- feat(filters): add JSON schema filter by @steebchen in #1250
- feat(api): add cost breakdown to usage object by @steebchen in #1247
- feat(model-details): add JSON schema by @steebchen in #1251
- feat: default retention to metadata-only, add data storage billing by @steebchen in #1243
- chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #1248
- feat(tracking): add provider tracking by @steebchen in #1152
- docs: add data retention & caching docs by @steebchen in #1253
- feat(worker): add token logging by @steebchen in #1254
- feat(routing): add provider metrics to routing metadata by @steebchen in #1257
- feat(gateway): add X-No-Fallback header to prevent provider fallback by @steebchen in #1259
- feat(docs): collapsable links by @smakosh in #1256
- feat(models): add priority flag for providers by @steebchen in #1258
- feat(logs): add params column for image request data by @steebchen in #1255
- fix(routing): only consider latency when stream is true by @steebchen in #1260
- feat: include thought signatures in Google tool calls by @steebchen in #1222
- feat(payments): add first-time credit purchase bonus logic by @steebchen in #1262
- fix(gateway): adapt health key reporting by @steebchen in #1264
- feat(google): enable reasoning for gemini-3-pro-preview by @steebchen in #1266
- fix(chat): guard empty tokens by @steebchen in #1263
- feat: add input image counting for cost calculations by @steebchen in #1271
- feat: add cyber monday promo and ui updates by @smakosh in #1273
- chore: upgrade turbo to 2.6.1 by @steebchen in #1274
- chore(lint): suppress exhaustive-deps by @steebchen in #1275
- chore(deps): bump nodemailer from 7.0.9 to 7.0.11 by @dependabot[bot] in #1288
- chore(deps-dev): bump @types/react from 19.2.6 to 19.2.7 in the react group by @dependabot[bot] in #1284
- chore(deps): bump react-syntax-highlighter from 16.0.0 to 16.1.0 by @dependabot[bot] in #1286
- feat(models): add Moonshot Kimi K2 by @steebchen in #1290
- feat(admin): introduce admin dashboard and related configurations by @smakosh in #1279
- fix(admin): replace root redirect with sign-in page by @steebchen in #1297
- chore(admin): update dependencies and remove promo code functionality by @smakosh in #1298
- chore: back 2 webpack by @smakosh in #1299
- refactor(logging): log fetch failures as warnings by @steebchen in #1295
- feat(models): add DeepSeek V3.2 and remove legacy mappings by @steebchen in #1291
- chore: enhance dashboard components by @smakosh in #1304
- feat(models): add DeepSeek V3.2 model via canopywave by @steebchen in #1305
- feat(models): add GLM-4.6V vision models by @steebchen in #1307
- fix(models): update anthropic models by @steebchen in #1311
- fix(gemini): implement thought signatures by @steebchen in #1313
- refactor(models): enhance provider key generation for improved uniqueness by @smakosh in #1315
- chore: upgrade next and react by @smakosh in #1316
- fix(openai): disable jsonOutputSchema and remove chat by @steebchen in #1317
- docs: add cline integration guide by @KinoThe-Kafkaesque in #1319
- chore: update dependencies and enhance admin metrics by @smakosh in #1323
- feat(cerebras): add Cerebras provider and models support by @steebchen in #1322
- refactor(posthog): enhance PostHogClient configuration checks and update useUser hook logic by @smakosh in #1327
- feat(k2): enable reasoning by @steebchen in #1324
- feat: add tiered cache pricing for gemini-3-pro-preview by @steebchen in #1329
- feat: add Gemini 3 Flash Preview model by @steebchen in #1330
- fix(providers): remove routeway-discount provider and mappings by @steebchen in #1332
- fix(model-list): show discounts in tiered pricing on provider cards by @steebchen in #1331
- chore: shared UI package by @smakosh in #1333
- chore(deps): bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #1335
- chore(deps): bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #1336
- feat(auth): require email verification by @steebchen in #1325
- feat(auth): block plus signs, blacklisted domains, and disposable emails by @steebchen in #1326
- feat(billing): track refunds in transaction table by @steebchen in #1338
New Contributors
- @KinoThe-Kafkaesque made their first contribution in #1319
Full Changelog: v1.2.0...v1.3.0