`GET /coding/v1/usages` reports contradictory quota: `usages.limit_7d.used_ratio = 0` while the weekly quota is exhausted and the API returns 403
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- api
Línea de trabajo
Start by locating the managed quota response parser and the managedQuotaEntrySchema/managedQuotaUsagesSchema definitions referenced in the issue. Compare the raw /usages response keys and values with the parsed limit_7d data, then check the related quota handling tests or add coverage so exhausted weekly usage is represented consistently or the authoritative field is documented.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What version of Kimi Code is running?
2.0.0
Which open platform/subscription were you using?
managed:kimi-code (Kimi For Coding), global region — base_url = "https://api.kimi.ai/coding/v1"
Which model were you using?
kimi-for-coding
What platform is your computer?
Linux x86_64, Ubuntu 24.04.5 LTS
What issue are you seeing?
GET {base_url}/usages returns three different views of the same quota state, and they contradict each other. Two of them say the weekly window is completely free while the account is actually out of weekly quota.
Running a prompt fails with a hard 403:
$ kimi -p "/status"
error: failed to run prompt: provider.auth_error: 403 You've reached your weekly (7-day)
usage limit. Your quota will reset when the current 7-day window ends.
Immediately afterwards, with a freshly refreshed token, the usage endpoint returns HTTP 200 with this body:
{
"usage": {
"limit": "100",
"used": "100",
"resetTime": "2026-09-24T02:09:07.465054Z"
},
"limits": [
{
"window": { "duration": 300, "timeUnit": "TIME_UNIT_MINUTE" },
"detail": {
"limit": "100",
"remaining": "100",
"resetTime": "2026-09-21T01:09:07.465054Z"
}
}
],
"usages": {
"limit_5h": { "used_ratio": 0, "reset_time": "2026-09-21T01:09:06Z" },
"limit_7d": { "used_ratio": 0, "reset_time": "2026-09-24T02:09:06Z" }
}
}
The inconsistency:
| Field | Says | Reset |
|---|---|---|
usage.used / usage.limit |
100 / 100 → exhausted |
2026-09-24 (weekly) |
usages.limit_7d.used_ratio |
0 → nothing used |
2026-09-24 (weekly) |
usages.limit_5h.used_ratio |
0 → nothing used |
2026-09-21 (5h) |
limits[0].detail.remaining |
100 of 100 → free |
2026-09-21 (5h) |
usage and usages.limit_7d describe the same 7-day window — they share the same reset timestamp — but report opposite states. The 403 confirms usage is the correct one, so usages.limit_7d.used_ratio appears to be stale or never populated.
Why it matters
Any client that reads usages.limit_7d.used_ratio concludes there is 100% of weekly quota left and keeps sending requests, each of which is rejected with 403. That is the natural field to read: it is the only one expressed as a ratio and the only one that splits the 5h and 7d windows explicitly.
Possibly related: field naming
The response uses snake_case (used_ratio, reset_time, limit_5h, limit_7d). Strings extracted from the 2.0.0 binary suggest the client-side schema declares these in camelCase:
managedQuotaEntrySchema = object({ usedRatio: number, resetAt: string().optional() });
managedQuotaUsagesSchema = object({
limit5h: ..., limit7d: ..., monthTotal: ..., monthCode: ...
});
I could not confirm whether a key transform is applied before validation, so this may be a non-issue — but if the schema is applied directly to the raw response, those fields would never match and the parsed quota would come back empty.
Expected behaviour
usages.limit_7d.used_ratio should reflect the same state as usage.used / usage.limit (here: 1.0, not 0). Alternatively, if usages is deprecated in favour of usage + limits[], documenting which field is authoritative would be enough.
How to reproduce
- Use an account whose weekly (7-day) quota is exhausted — confirmed by a 403 on any prompt.
GET {base_url}/usageswithAuthorization: Bearer <access_token>.- Compare
usage.used/usage.limitagainstusages.limit_7d.used_ratio.
- Lenguaje dominante
- TypeScript
- Estrellas
- 7.7k
- Forks
- 1.3k
- Merge medio
- 12 h 34 min
- PR fusionados (30 d)
- 307
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MoonshotAI/kimi-code
-
手机竖屏显示状态下输入框的扩展按钮没有显示Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MoonshotAI/kimi-code#4040 ·
Los mantenedores suelen responder en 1 día
-
顶栏字体不随字体大小缩放bugAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MoonshotAI/kimi-code#4039 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
MoonshotAI/kimi-code#4010 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
MoonshotAI/kimi-code#4008 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
docs(zh): configuration/providers.md is missing the "OAuth and credential injection" sectionAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
MoonshotAI/kimi-code#3947 ·
Los mantenedores suelen responder en 1 día
Todos los issues de MoonshotAI/kimi-code
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/vscode-livepreview#876 ·
Los mantenedores suelen responder en 1 día
-
needs-triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
JustJarethB/invoicer#54 ·
-
ICP 1.2.0 shows a scheduled task's interval in milliseconds under the label "Interval (In seconds)"AbiertoNeeds Triage Type/Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
wso2/product-integrator#2585 ·
Los mantenedores suelen responder en 1 día
-
Add: Telemundo West sdAbiertocheck:passed streams:add
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
design
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
MTES-MCT/monitor-field#119 ·
Los mantenedores suelen responder en 1 día