Grok2API
δΈζ | English
This project is for learning and research only. You must comply with Grok Terms of Use and local laws and regulations. Do not use for illegal purposes.
Open source projects welcome everyone's support for secondary development and pull requests, but please retain the original author's and frontend's logos to respect the work of others!
Grok2API rebuilt with FastAPI, fully aligned with the latest web call format. Supports streaming/non-streaming chat, image generation/editing, video generation/upscale (text-to-video and image-to-video), deep reasoning, token pool concurrency, and automatic load balancing.
Quick Start
Local
uv sync
uv run main.py
Docker Compose
git clone https://github.com/chenyme/grok2api
cd grok2api
docker compose up -d
Vercel
Set
DATA_DIR=/tmp/dataand disable file logs withLOG_FILE_ENABLED=false.For persistence, use MySQL / Redis / PostgreSQL and set
SERVER_STORAGE_TYPEandSERVER_STORAGE_URL.
Render
Render free instances sleep after 15 minutes of inactivity; redeploy/restart will lose data.
For persistence, use MySQL / Redis / PostgreSQL and set
SERVER_STORAGE_TYPEandSERVER_STORAGE_URL.
Admin Panel
- Access:
http://<host>:8000/admin - Default password:
grok2api(configapp.app_key, recommended to change)
Features:
- Token Management: import/add/delete tokens, view status and quota
- Status Filter: filter by status (active/limited/expired) or NSFW status
- Batch Ops: batch refresh/export/delete/enable NSFW
- NSFW Enable: one-click Unhinged for tokens (proxy or
cf_clearancerequired) - Config Management: update system config online
- Cache Management: view and clear media cache
Environment Variables
Configure
.env
| Name | Description | Default | Example |
|---|---|---|---|
LOG_LEVEL |
Log level | INFO |
DEBUG |
LOG_FILE_ENABLED |
Enable file logging | true |
false |
DATA_DIR |
Data dir (config/tokens/locks) | ./data |
/data |
SERVER_HOST |
Bind address | 0.0.0.0 |
0.0.0.0 |
SERVER_PORT |
Server port | 8000 |
8000 |
SERVER_WORKERS |
Uvicorn worker count | 1 |
2 |
SERVER_STORAGE_TYPE |
Storage type (local/redis/mysql/pgsql) |
local |
pgsql |
SERVER_STORAGE_URL |
Storage DSN (optional for local) | "" |
postgresql+asyncpg://user:password@host:5432/db |
MySQL example:
mysql+aiomysql://user:password@host:3306/db(if you providemysql://, it will be converted tomysql+aiomysql://).
Quotas
- Basic account: 80 requests / 20h
- Super account: 140 requests / 2h
Models
| Model | Cost | Account | Chat | Image | Video |
|---|---|---|---|---|---|
grok-3 |
1 | Basic/Super | Yes | Yes | - |
grok-3-mini |
1 | Basic/Super | Yes | Yes | - |
grok-3-thinking |
1 | Basic/Super | Yes | Yes | - |
grok-4 |
1 | Basic/Super | Yes | Yes | - |
grok-4-mini |
1 | Basic/Super | Yes | Yes | - |
grok-4-thinking |
1 | Basic/Super | Yes | Yes | - |
grok-4-heavy |
4 | Super | Yes | Yes | - |
grok-4.1-mini |
1 | Basic/Super | Yes | Yes | - |
grok-4.1-fast |
1 | Basic/Super | Yes | Yes | - |
grok-4.1-expert |
4 | Basic/Super | Yes | Yes | - |
grok-4.1-thinking |
4 | Basic/Super | Yes | Yes | - |
grok-4.20-beta |
1 | Basic/Super | Yes | Yes | - |
grok-imagine-1.0 |
- | Basic/Super | - | Yes | - |
grok-imagine-1.0-edit |
- | Basic/Super | - | Yes | - |
grok-imagine-1.0-video |
- | Basic/Super | - | - | Yes |
API
POST /v1/chat/completions
Generic endpoint: chat, image generation, image editing, video generation, video upscaling
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GROK2API_API_KEY" \
-d '{
"model": "grok-4",
"messages": [{"role":"user","content":"Hello"}]
}'
Supported request parameters
| Field | Type | Description | Allowed values |
|---|---|---|---|
model |
string | Model ID | See model list above |
messages |
array | Message list | See message format below |
stream |
boolean | Enable streaming | true, false |
reasoning_effort |
string | Reasoning effort | none, minimal, low, medium, high, xhigh |
temperature |
number | Sampling temperature | 0 ~ 2 |
top_p |
number | Nucleus sampling | 0 ~ 1 |
video_config |
object | Video model only | Supported: grok-imagine-1.0-video |
ββ aspect_ratio |
string | Video aspect ratio | 16:9, 9:16, 1:1, 2:3, 3:2, 1280x720, 720x1280, 1792x1024, 1024x1792, 1024x1024 |
ββ video_length |
integer | Video length (seconds) | 6, 10, 15 |
ββ resolution_name |
string | Resolution | 480p, 720p |
ββ preset |
string | Style preset | fun, normal, spicy, custom |
image_config |
object | Image models only | Supported: grok-imagine-1.0 / grok-imagine-1.0-edit |
ββ n |
integer | Number of images | 1 ~ 10 |
ββ size |
string | Image size | 1280x720, 720x1280, 1792x1024, 1024x1792, 1024x1024 |
ββ response_format |
string | Response format | url, b64_json, base64 |
Message format (messages):
| Field | Type | Description |
|---|---|---|
role |
string | developer, system, user, assistant |
content |
string/array | Plain text or multimodal array |
Multimodal content block types (content array):
| type | Description | Example |
|---|---|---|
text |
Text | {"type": "text", "text": "Describe this image"} |
image_url |
Image URL | {"type": "image_url", "image_url": {"url": "https://..."}} |
input_audio |
Audio | {"type": "input_audio", "input_audio": {"data": "https://..."}} |
file |
File | {"type": "file", "file": {"file_data": "https://..."}} |
Notes:
image_url/input_audio/fileonly supports URL or Data URI (data:<mime>;base64,...); raw base64 will be rejected.reasoning_effort:nonedisables thinking output; any other value enables it.grok-imagine-1.0-editrequires an image; if multiple are provided, the last image and last text are used.grok-imagine-1.0-videosupports text-to-video and image-to-video viaimage_url.- Any other parameters will be discarded and ignored.
POST /v1/images/generations
Image generation endpoint
curl http://localhost:8000/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GROK2API_API_KEY" \
-d '{
"model": "grok-imagine-1.0",
"prompt": "A cat floating in space",
"n": 1
}'
Supported request parameters
| Field | Type | Description | Allowed values |
|---|---|---|---|
model |
string | Image model ID | grok-imagine-1.0 |
prompt |
string | Prompt | - |
n |
integer | Number of images | 1 - 10 (streaming: 1 or 2 only) |
stream |
boolean | Enable streaming | true, false |
size |
string | Image size | 1280x720, 720x1280, 1792x1024, 1024x1792, 1024x1024 |
quality |
string | Image quality | - (not supported) |
response_format |
string | Response format | url, b64_json, base64 |
style |
string | Style | - (not supported) |
Notes:
qualityandstyleare OpenAI compatibility placeholders and are not customizable yet.
POST /v1/images/edits
Image edit endpoint (multipart/form-data)
curl http://localhost:8000/v1/images/edits \
-H "Authorization: Bearer $GROK2API_API_KEY" \
-F "model=grok-imagine-1.0-edit" \
-F "prompt=Make the image clearer" \
-F "image=@/path/to/image.png" \
-F "n=1"
Supported request parameters
| Field | Type | Description | Allowed values |
|---|---|---|---|
model |
string | Image model ID | grok-imagine-1.0-edit |
prompt |
string | Edit prompt | - |
image |
file | Source image | png, jpg, webp |
n |
integer | Number of images | 1 - 10 (streaming: 1 or 2 only) |
stream |
boolean | Enable streaming | true, false |
size |
string | Image size | 1280x720, 720x1280, 1792x1024, 1024x1792, 1024x1024 |
quality |
string | Image quality | - (not supported) |
response_format |
string | Response format | url, b64_json, base64 |
style |
string | Style | - (not supported) |
Notes:
qualityandstyleare OpenAI compatibility placeholders and are not customizable yet.
Configuration
Config file: data/config.toml
In production or behind a reverse proxy, make sure
app.app_urlis a publicly accessible URL, otherwise file links may be incorrect or result in 403.
v2.0 config migration: old configs are automatically migrated. The old
[grok]section is mapped into the new config structure.
| Module | Field | Key | Description | Default |
|---|---|---|---|---|
| app | app_url |
App URL | External base URL used for file links. | http://127.0.0.1:8000 |
app_key |
Admin password | Login password for admin panel. | grok2api |
|
api_key |
API key | Optional API key for access. | "" |
|
image_format |
Image format | url or base64. |
url |
|
video_format |
Video format | html or url (processed link). |
html |
|
temporary |
Temporary chat | Enable temporary chat mode. | true |
|
disable_memory |
Disable memory | Disable Grok memory. | true |
|
stream |
Stream | Enable streaming by default. | true |
|
thinking |
Thinking | Enable reasoning output. | true |
|
dynamic_statsig |
Dynamic statsig | Generate dynamic Statsig values. | true |
|
filter_tags |
Filter tags | Filter special tags in responses. | ["xaiartifact", "xai:tool_usage_card", "grok:render"] |
|
| proxy | base_proxy_url |
Base proxy URL | Proxy to Grok web. | "" |
asset_proxy_url |
Asset proxy URL | Proxy to Grok assets (img/video). | "" |
|
cf_clearance |
CF Clearance | Cloudflare clearance cookie. | "" |
|
browser |
Browser fingerprint | curl_cffi fingerprint (e.g. chrome136). | chrome136 |
|
user_agent |
User-Agent | HTTP User-Agent string. | Mozilla/5.0 (Macintosh; ...) |
|
| voice | timeout |
Timeout | Voice request timeout (seconds). | 120 |
| chat | concurrent |
Concurrency | Reverse interface concurrency limit. | 10 |
timeout |
Timeout | Reverse request timeout (seconds). | 60 |
|
stream_timeout |
Stream idle timeout | Stream idle timeout (seconds). | 60 |
|
| video | concurrent |
Concurrency | Reverse interface concurrency limit. | 10 |
timeout |
Timeout | Reverse request timeout (seconds). | 60 |
|
stream_timeout |
Stream idle timeout | Stream idle timeout (seconds). | 60 |
|
| retry | max_retry |
Max retry | Max retries for upstream failures. | 3 |
retry_status_codes |
Retry codes | HTTP status codes that trigger retry. | [401, 429, 403] |
|
retry_backoff_base |
Backoff base | Retry backoff base seconds. | 0.5 |
|
retry_backoff_factor |
Backoff factor | Exponential backoff factor. | 2.0 |
|
retry_backoff_max |
Backoff max | Max delay per retry (seconds). | 30.0 |
|
retry_budget |
Retry budget | Max total retry time (seconds). | 90.0 |
|
| image | timeout |
Timeout | WebSocket timeout (seconds). | 120 |
stream_timeout |
Stream idle timeout | WS stream idle timeout (seconds). | 120 |
|
final_timeout |
Final timeout | Wait time after medium image (seconds). | 15 |
|
nsfw |
NSFW | Enable NSFW. | true |
|
medium_min_bytes |
Medium min bytes | Minimum size for medium image. | 30000 |
|
final_min_bytes |
Final min bytes | Minimum size for final image (JPG > 100KB typical). | 100000 |
|
| token | auto_refresh |
Auto refresh | Enable token auto refresh. | true |
refresh_interval_hours |
Refresh interval | Basic token refresh interval (hours). | 8 |
|
super_refresh_interval_hours |
Super refresh interval | Super token refresh interval (hours). | 2 |
|
fail_threshold |
Fail threshold | Consecutive failures to disable. | 5 |
|
save_delay_ms |
Save delay | Merge write delay (ms). | 500 |
|
usage_flush_interval_sec |
Usage flush interval | Minimum interval to flush usage fields to DB (seconds). | 5 |
|
reload_interval_sec |
Reload interval | Multi-worker token reload interval (seconds). | 30 |
|
| cache | enable_auto_clean |
Auto clean | Enable cache auto cleanup. | true |
limit_mb |
Size limit | Cleanup threshold (MB). | 1024 |
|
| asset | upload_concurrent |
Upload concurrency | Max upload concurrency (recommended 30). | 30 |
upload_timeout |
Upload timeout | Upload timeout (seconds). | 60 |
|
download_concurrent |
Download concurrency | Max download concurrency (recommended 30). | 30 |
|
download_timeout |
Download timeout | Download timeout (seconds). | 60 |
|
list_concurrent |
List concurrency | Max list concurrency (recommended 10). | 10 |
|
list_timeout |
List timeout | List timeout (seconds). | 60 |
|
list_batch_size |
List batch size | Tokens per list batch (recommended 10). | 10 |
|
delete_concurrent |
Delete concurrency | Max delete concurrency (recommended 10). | 10 |
|
delete_timeout |
Delete timeout | Delete timeout (seconds). | 60 |
|
delete_batch_size |
Delete batch size | Tokens per delete batch (recommended 10). | 10 |
|
| nsfw | concurrent |
Concurrency | NSFW batch enable concurrency (recommended 10). | 10 |
batch_size |
Batch size | NSFW batch size (recommended 50). | 50 |
|
timeout |
Timeout | NSFW request timeout (seconds). | 60 |
|
| usage | concurrent |
Concurrency | Usage refresh concurrency (recommended 10). | 10 |
batch_size |
Batch size | Usage batch size (recommended 50). | 50 |
|
timeout |
Timeout | Usage request timeout (seconds). | 60 |