This document describes known HTTP status codes and error responses returned by the unofficial ГдеБЕНЗ API.
The information below is based on reverse engineering of the client application and observed server behavior.
Most endpoints return JSON errors in the following format.
{
"detail": "Error description"
}Some endpoints may return an empty body.
| Status | Meaning |
|---|---|
| 200 | Request completed successfully |
| 201 | Resource created |
| 204 | No content |
| 400 | Invalid request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Resource not found |
| 405 | Method not allowed |
| 409 | Conflict |
| 413 | Payload too large |
| 415 | Unsupported media type |
| 422 | Validation error |
| 429 | Too many requests |
| 500 | Internal server error |
| 502 | Bad gateway |
| 503 | Service unavailable |
| 504 | Gateway timeout |
The request completed successfully.
Example
HTTP/1.1 200 OKExample body
{
"vt":"2f8819c09b094bb48d4aa407",
"ttl":1800
}Returned when a resource is successfully created.
Possible endpoints
POST /api/comments
POST /api/station-suggestions
Returned when no response body is required.
Not commonly observed.
The request is invalid.
Possible causes
- Missing JSON body
- Invalid parameters
- Invalid coordinates
- Malformed request
- Invalid station ID
Example
{
"detail":"Invalid request"
}Returned when an endpoint requires authorization and the caller is anonymous.
Observed on
POST /api/comments-onsiteAnonymous call with a valid body ({comment_id, osm_id, cvt}, osm_id as a string) returns:
{"detail":"Unauthorized"}This endpoint additionally requires the visitor to be within 0.3 km of the station; a cvt whose osm does not match is rejected.
Returned when the server refuses to process the request.
Observed reasons
- Voting outside Russia
- Cloudflare validation failed
- Invalid protection token
- User banned
- Feature disabled
Example
{
"detail":"Forbidden"
}Client message
Available only from Russia 🇷🇺
Returned when the requested resource does not exist.
Examples
Station not found
Comment not found
Unknown endpoint
Example
{
"detail":"Not Found"
}Occurs when using an unsupported HTTP method.
Example
GET /api/comments
when only POST is supported.
One of the most common errors.
Returned when the request conflicts with current server state.
Observed examples
Duplicate vote
Vote cooldown
Duplicate station suggestion
Already pending
Already reported
Example
{
"detail":"revote_cooldown"
}The client displays
You can update this station every 4 hours.
Other possible response
{
"detail":"already_exists"
}Possible response when a submitted comment exceeds server limits.
Not directly observed.
Possible when JSON Content-Type is missing.
Example
Content-Type: text/plain
instead of
application/json
Possible validation response.
Typical causes
- Missing fields
- Invalid data types
- Invalid coordinates
Example
{
"detail":"Validation failed"
}Observed frequently.
Returned when request rate exceeds server limits.
Examples
Voting too frequently
Too many reports
Too many suggestions
Repeated API requests
Example
{
"detail":"Too many requests"
}Client message
Too many requests — please try again later.
Unexpected server error.
Example
{
"detail":"Internal server error"
}Returned by reverse proxy.
Possible causes
- Backend unavailable
- Upstream timeout
Observed for disabled functionality.
Example
Station suggestions disabled
Client message
Station suggestions are currently unavailable.
Example
{
"detail":"Service unavailable"
}Returned when the backend does not respond in time.
Not directly observed.
Endpoint
POST /api/comments
Possible responses
| Status | Description |
|---|---|
| 200 | Vote accepted |
| 400 | Invalid request |
| 403 | Country restriction |
| 409 | Vote cooldown |
| 429 | Rate limit |
| 500 | Internal error |
Endpoint
POST /api/comments/{id}/report
Possible responses
| Status | Description |
|---|---|
| 200 | Report accepted |
| 400 | Invalid request |
| 403 | Invalid RT token |
| 409 | Already reported |
| 429 | Too many reports |
Endpoint
POST /api/station-suggestions
Possible responses
| Status | Description |
|---|---|
| 200 | Suggestion accepted |
| 400 | Invalid map URL |
| 403 | User banned |
| 409 | Duplicate suggestion |
| 429 | Daily limit exceeded |
| 503 | Suggestions disabled |
Endpoint
GET /api/search
Possible responses
| Status | Description |
|---|---|
| 200 | Success |
| 400 | Invalid query |
| 429 | Rate limit |
| 500 | Internal error |
Endpoint
GET /api/nearby
Possible responses
| Status | Description |
|---|---|
| 200 | Success |
| 400 | Invalid coordinates |
| 404 | Area unavailable |
| 429 | Too many requests |
Endpoint
GET /api/vt
Possible responses
| Status | Description |
|---|---|
| 200 | Success |
| 500 | Internal error |
Endpoint
GET /api/rt
Possible responses
| Status | Description |
|---|---|
| 200 | Success |
| 500 | Internal error |
Possible responses
| Status | Description |
|---|---|
| 403 | Turnstile verification failed |
| 429 | Bot protection triggered |
Common validation failures include
- Missing station ID
- Invalid latitude
- Invalid longitude
- Missing visitor token
- Invalid report token
- Missing JSON body
- Invalid Content-Type
The client displays localized messages instead of raw server errors.
Examples
| Server | Client Message |
|---|---|
| 403 | Available only from Russia 🇷🇺 |
| 409 | Vote cooldown |
| 429 | Too many requests |
| 503 | Service temporarily unavailable |
| Network Error | Connection error |
| Error | Retry |
|---|---|
| 400 | No |
| 403 | No |
| 404 | No |
| 409 | Wait before retrying |
| 429 | Retry after delay |
| 500 | Retry later |
| 502 | Retry later |
| 503 | Retry later |
| 504 | Retry later |
Known detail values observed during analysis include:
| detail | Meaning |
|---|---|
| revote_cooldown | Vote cooldown period has not expired |
| already_exists | Duplicate resource |
| forbidden | Request denied |
| validation_failed | Validation error |
| too_many_requests | Rate limit exceeded |
| not_found | Resource not found |
Not every endpoint returns every status code listed above.
Some status codes are inferred from standard FastAPI/HTTP behavior, while others were directly observed during reverse engineering of the client application and network traffic.