Generor API Documentation
Build with 93+ AI generators — text, image, video, audio, and more.
A unified REST API for generating, browsing, and managing AI content. All requests use JSON. Authenticate with a Bearer token.
Authentication
Authenticate with a Bearer token in the Authorization header:
curl https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_your_api_key_here"
API keys start with gnr_live_ followed by 40 hex characters. Create keys via the API Keys endpoint or your account settings.
Some endpoints (browsing generators, public creations, models) work without authentication. Endpoints marked with AUTH require a valid API key.
Scopes
API keys can be scoped to limit access:
| Scope | Allows |
|---|---|
read | GET requests to all endpoints |
write | POST, PATCH, DELETE operations (comments, ratings, profile updates, etc.) |
generate | Content generation (costs credits) |
Keys with no scopes specified have full access.
Rate Limits
Limits are per API key. Every response includes rate limit headers:
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 1708444860
X-RateLimit-Tier: free
| Tier | Per Minute | Per Hour | Per Day |
|---|---|---|---|
| free | 30 | 500 | 5,000 |
| basic | 60 | 2,000 | 20,000 |
| pro | 120 | 5,000 | 50,000 |
| enterprise | 300 | 20,000 | 200,000 |
Unauthenticated requests are limited to 15/minute per IP. When rate limited, you'll receive a 429 response with a Retry-After header.
Response Format
All responses use a consistent JSON envelope:
Success
{
"success": true,
"data": { ... },
"meta": {
"page": 1,
"per_page": 20,
"total": 142,
"total_pages": 8,
"has_next": true,
"has_prev": false
}
}
Error
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Creation not found",
"status": 404
}
}
Pagination
List endpoints support pagination via query parameters:
| Parameter | Default | Description |
|---|---|---|
page | 1 | Page number (1-based) |
per_page | 20 | Items per page (max 100) |
sort | newest | Sort order: newest, oldest |
Generators
GET /generators
List all available generators.
curl https://generor.com/api/v1/generators
Query params: status (active, development, all)
Response: Array of generators with slug, title, description, icon, and similar generators.
GET /generators/{slug}
Get detailed info about a specific generator.
curl https://generor.com/api/v1/generators/image
GET /generators/{slug}/creations
Browse public creations for a generator. Supports pagination.
curl "https://generor.com/api/v1/generators/joke/creations?page=1&per_page=10"
POST /generators/{slug}/estimate
Preview the credit cost and expected generation time before calling /generate. Same body shape as /generate — but read-only: no credits charged, no creation written. This is the exact same number the UI shows next to the Generate button.
curl -X POST https://generor.com/api/v1/generators/horoscope/estimate \
-H "Content-Type: application/json" \
-d '{
"model_id": 37,
"count": 5,
"parameters": {
"zodiac-sign": "aries",
"horoscope-length": "long"
}
}'
Response:
{
"success": true,
"data": {
"generator": "horoscope",
"model_id": 37,
"model_type": "text",
"model_name": "Gemini 3.5 Flash",
"credit_cost": {
"total": 15, // after bulk discount
"per_item": 3, // model base × length/quality multipliers
"count": 5,
"discount": 0, // credits saved
"discount_percent": 5 // % off applied (count% off, capped at 10%)
},
"time_estimate": {
"seconds": 50, // total wall-clock estimate
"per_item": 10,
"min_seconds": 8,
"max_seconds": 14,
"sample_count": 10, // recent generations averaged
"has_historical": true,
"source": "historical" // or "fallback" when sample_count < 3
},
"applied_parameters": { // what the API actually used (schema-filtered)
"zodiac-sign": "aries",
"horoscope-length": "long",
"model-text": "3",
"horoscope-count": "5"
}
}
}
Open to unauthenticated callers — pricing/timing is public information and matches what the public generator page displays.
Snapped video durations
If you pass a seconds value that isn't in the model's supported_durations, the API snaps to the nearest supported value (ties break to the lower) and surfaces the change in an adjustments block. The credit cost and time estimate in the same response reflect the snapped value — what /generate will actually do — not the original request.
{
"success": true,
"data": {
"credit_cost": { "total": 30, ... },
"time_estimate": { "seconds": 60, ... },
"adjustments": {
"seconds": {
"requested": 3,
"used": 5,
"supported": [5, 6, 7, 8, 10, 12, 15],
"reason": "snapped to nearest provider-supported duration"
}
}
}
}
When to use it
- Pre-flight cost check — confirm a user can afford the generation before charging.
- Progress UI — feed
time_estimate.secondsinto your loading bar so users know how long to wait. - Parameter tuning — call it whenever a user changes a dropdown; cost updates without committing to generate.
Relationship to /generate — /estimate is a separate, optional call. /generate already returns the actual credit_cost it charged + credits_remaining after the fact, so if you're happy paying whatever the live price is, you can skip /estimate entirely.
Use the Generor API at https://generor.com/api/v1.
Before calling POST /generators/{slug}/generate, call
POST /generators/{slug}/estimate with the same body to get back:
- credit_cost.total (credits the next generate call will charge)
- time_estimate.seconds (expected wall-clock duration)
Show both to the user, then call /generate when they confirm.
The /generate response includes the real credit_cost charged and
credits_remaining — use those to update the user's balance.
Discover each generator's tweakable fields with GET /generators/{slug}
and pass them under the `parameters` object on both /estimate and
/generate (keys match the dropdown IDs you see on the public page).
POST /generators/{slug}/generate AUTH
Generate content using AI. This is a synchronous call — the response returns when generation is complete. Costs credits based on the model selected. Text generation typically takes 5-30 seconds, image generation 10-60 seconds, and video generation can take several minutes.
# Text generation (joke with GPT 5 Nano)
curl -X POST https://generor.com/api/v1/generators/joke/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Tell me a joke about programming",
"model_id": 37
}'
# Image generation (Flux Schnell, square)
curl -X POST https://generor.com/api/v1/generators/image/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "A sunset over mountains",
"model_id": 10003,
"aspect_ratio": 1
}'
# Image description (vision — Qwen VL Max, image-only input, prompt is optional)
curl -X POST https://generor.com/api/v1/generators/vision/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"model_id": 34,
"image_url": "https://example.com/photo.jpg",
"preference": "detailed"
}'
# Video generation (Happy Horse 1.0 R2V — multi-reference, 6s, wide)
curl -X POST https://generor.com/api/v1/generators/video/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "The character from [Image1] walks through the forest from [Image2]",
"model_id": 20050,
"aspect_ratio": "16:9",
"seconds": 6,
"reference_images": [
"https://example.com/character.jpg",
"https://example.com/forest.jpg"
]
}'
# Video generation (Happy Horse Video Edit — natural-language edit of an existing clip)
curl -X POST https://generor.com/api/v1/generators/video/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Replace the sky with a stormy sunset",
"model_id": 20051,
"video_url": "https://example.com/source.mp4",
"seconds": 5
}'
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | The generation prompt (max 10,000 chars) |
model_id | integer | Yes | AI model ID. Text: 1-9999, Image: 10001-19999, Video: 20001-29999. See Models. |
privacy_mode | integer | No | 0 = public (default), 1 = private |
team_id | integer | No | Create under a team |
count | integer | No | Number of items (1-10, default 1) |
language | string | No | Language code for text generation (e.g. "en-US", "nb-NO"). Default: "auto" |
temperature | float | No | LLM creativity (text models only, 0.0-2.0) |
preference | string/int | No | Generator-specific preference (e.g. joke type, poem style) |
preference_two | string/int | No | Generator-specific secondary preference |
aspect_ratio | int or string | No | Accepts numeric IDs or ratio/name strings. Image: 1 / "1:1" / "square", 2 / "3:4" / "vertical", 3 / "4:3" / "horizontal", 4 / "16:9" / "wide", 5 / "9:16" / "tall". Video: 1 / "16:9" / "wide", 2 / "9:16" / "tall". Tip: use ratio strings like "16:9" and the API maps to the correct ID for the model type. |
image_url | string | No | Reference image URL for image-to-image, style transfer, or image-to-video (I2V). |
seconds | integer | No | Video duration in seconds (video models only). Each provider accepts only a discrete set — query GET /models/video/{id} for supported_durations. If you pass an unsupported value, the API snaps it to the nearest supported one and reports the adjustment in adjustments.seconds on the response. |
generate_audio | boolean | No | Native-audio toggle for Veo 3.1 and Seedance 1.5 Pro (video). Other video models bake audio behavior in and ignore this flag. |
ending_frame_url | string | No | End-frame anchor for models that support start+end frame control (Veo 3.1, Wan 2.6 I2V, Seedance Pro Lite, Kling v3). Pair with image_url for seamless transitions or loops. |
reference_images | array<string> | No | Up to 9 reference image URLs. Supported by: Veo 3.1 (max 3), Seedance 2.0 (max 9), Happy Horse R2V (max 9), Happy Horse Video Edit (max 5). Order is preserved and surfaced to the model as [Image1] … [ImageN] when prompts reference them. |
reference_videos | array<string> | No | Up to 3 reference video URLs. Used by Seedance 2.0 (Replicate) and Dreamina Seedance 2.0 (BytePlus direct) for motion/style coherence. |
reference_audio | string | No | Reference audio URL for music/voice continuity. Currently used by Dreamina Seedance 2.0 (model 20060-20062, BytePlus direct). |
video_url | string | No | Source video URL — required by Happy Horse Video Edit (model 20051), and used by Dreamina Seedance 2.0 (20060-20062) for video-edit / video-extend modes. |
parameters | object | No | Generator-specific fields — the same dropdowns the frontend exposes, keyed by their DOM IDs. See Generator Parameters below. Unknown / invalid keys are silently dropped. |
Generator Parameters
Every generator's full set of tweakable fields lives in a per-generator schema (the same source the on-site dropdowns and URL-prefill use). Pass any of those fields in the parameters object on a generate request to drive them programmatically.
Get the schema for any generator at GET /generators/{slug} — the parameters array on the response lists each field with its id, type (enum, number, or model), options (or min/max), default, and cost_multipliers.
# 1) Discover the parameters for the horoscope generator
curl https://generor.com/api/v1/generators/horoscope
# 2) Pass them on the generate call
curl -X POST https://generor.com/api/v1/generators/horoscope/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Aries weekly reading",
"model_id": 37,
"parameters": {
"zodiac-sign": "aries",
"horoscope-timeframe": "weekly",
"horoscope-tone": "mystical",
"horoscope-length": "long",
"horoscope-focus": "career"
}
}'
# Image example — every dropdown in the UI is a key here
curl -X POST https://generor.com/api/v1/generators/wallart/generate \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{
"prompt": "Calm mountain lake at dawn",
"model_id": 10003,
"parameters": {
"wallart-type": "framed-print",
"wallart-orientation": "landscape",
"image-aspect-ratio": "4"
}
}'
Additional text-generation fields
For text generators (model_id 1-9999), these top-level body fields are forwarded to the LLM endpoint when relevant:
| Field | Type | Description |
|---|---|---|
user_text | string | Free-form supplemental text (e.g. source content to summarize / transform) |
user_text_two | string | Secondary supplemental text (used by generators with two text inputs) |
avoid_duplicates | boolean | Bias the model toward novel outputs across a batch |
thinking_mode | string | For reasoning-capable models: off, on, or high |
story_context | string | Source story passed to story, story-part, and storyboard for on-brand scene writing |
character_context / character_name / character_id | string / int | Character continuity for storyboards, story parts, and follow-up creations |
support_for | integer | Parent creation ID — links this generation as a child / companion creation |
mode | string | Generator-specific mode toggle (e.g. game phase) |
model_speech | integer | Speech model to pair with the text output (used for narrated horoscopes, podcasts, etc.) |
item_index / total_count | integer | Sequential generation hints (used when generating items in order, e.g. solution steps) |
translation_of / source_language | integer / string | Translate an existing creation rather than generate from scratch |
Response (201 Created) — Text generator example:
{
"success": true,
"data": {
"generator": "joke",
"model_id": 37,
"model_type": "text",
"model_name": "Gemini 3.5 Flash",
"creations": [
{
"creation_id": 6144,
"text": "Why do programmers prefer dark mode? Because light attracts bugs!",
"illustration_desc": "a minimalist bug icon on a dark background"
}
],
"credit_cost": 1,
"credit_cost_estimated": 1,
"credits_remaining": 36024,
"time_taken_seconds": 4.18
}
}
Response (201 Created) — Image generator example:
{
"success": true,
"data": {
"generator": "image",
"model_id": 10003,
"model_type": "image",
"model_name": "black-forest-labs/flux-schnell",
"creations": [
{
"creation_id": 6147,
"image_url": "https://generor.com/users/2/img/image-6147.webp"
}
],
"credit_cost": 24,
"credit_cost_estimated": 6,
"credits_remaining": 35998,
"time_taken_seconds": 23.7
}
}
Snapped video durations — if the caller's seconds isn't in the model's supported_durations, the API snaps to the nearest supported value before invoking the provider and adds an adjustments.seconds block to the response identical in shape to the one on /estimate. This prevents providers from silently defaulting unsupported values.
How the cost fields work
credit_cost— the actual amount deducted, computed asbalance_before − balance_after. This is the source of truth: use it for logging, billing, and updating user balances.credit_cost_estimated— the upfront catalog estimate (the same number/estimatewould have predicted). Included for transparency and drift monitoring. Often differs fromcredit_costfor video / per-second / per-character pricing where the real charge is computed inside the provider call.time_taken_seconds— actual wall-clock duration. Compare againsttime_estimate.secondsfrom/estimateto validate the historical-time prediction.
text, illustration_desc for jokes; dish_name, ingredients for recipes). Use GET /creations/{id} to fetch the full creation data later. Creations
GET /creations AUTH
List your own creations.
curl https://generor.com/api/v1/creations \
-H "Authorization: Bearer gnr_live_..."
Query params: generator (filter by slug), page, per_page, sort
GET /creations/public
Browse all public creations across all generators.
curl "https://generor.com/api/v1/creations/public?generator=image&page=1"
GET /creations/search
Search public creations by prompt text.
curl "https://generor.com/api/v1/creations/search?q=sunset+mountain"
GET /creations/{id}
Get a single creation with full details, images, and generator-specific data.
curl https://generor.com/api/v1/creations/12345
Public creations are accessible to anyone. Private creations require authentication as the owner.
Response includes:
{
"success": true,
"data": {
"creation_id": 12345,
"generator": "image",
"user_id": 42,
"username": "johndoe",
"prompt": "A sunset over mountains",
"created_at": "2026-02-20 12:00:00",
"privacy_mode": 0,
"type": "img",
"license": 1,
"images": [
{
"url": "/users/42/img/image-12345.png",
"width": 1024,
"height": 1024
}
],
"generator_data": { ... }
}
}
GET /creations/{id}/status AUTH
Check the generation status of a creation (useful if you're tracking generation records).
curl https://generor.com/api/v1/creations/12345/status \
-H "Authorization: Bearer gnr_live_..."
Status values: pending, generating, completed, failed, cancelled
PATCH /creations/{id} AUTH
Update a creation you own.
curl -X PATCH https://generor.com/api/v1/creations/12345 \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"privacy_mode": 1, "license": 2}'
| Field | Values |
|---|---|
privacy_mode | 0 (public), 1 (private) |
license | 1 (Open GO-1.0), 2 (Exclusive GE-1.0) |
DELETE /creations/{id} AUTH
Delete a creation you own (soft delete).
curl -X DELETE https://generor.com/api/v1/creations/12345 \
-H "Authorization: Bearer gnr_live_..."
Models
GET /models
List all available AI models grouped by type.
curl https://generor.com/api/v1/models
GET /models/{type}
List models for a specific type.
curl https://generor.com/api/v1/models/image
Valid types: text, image, video, speech, music, soundeffect, upscale, vector, backgroundremoval
Response per model:
{
"id": 10001,
"name": "Flux 1.1 Pro",
"type": "image",
"provider": "replicate",
"description": "High-quality image generation...",
"credit_cost": 80,
"supports_img2img": true,
"supports_aspect_ratio": true
}
Video models additionally include the full provider-capability struct:
{
"id": 20061,
"name": "Dreamina Seedance 2.0 (720p)",
"type": "video",
"provider": "byteplus",
"credit_cost": 6,
// Duration constraints
"supported_durations": [5, 6, 7, 8, 10, 12, 15],
"default_duration": 8,
// Audio toggle
"supports_audio": true,
"audio_cost_multiplier": 1,
// End-frame anchoring (pass `ending_frame_url` on /generate)
"supports_end_frame": true,
// Resolution variants — same model at different qualities lives at
// different model_ids. Switch quality by picking the matching id.
"quality": "720p",
"default_quality": "720p",
"qualities": { "480p": 20060, "720p": 20061, "1080p": 20062 },
"group_slug": "dreamina-seedance-2-direct",
"group_name": "Dreamina Seedance 2.0",
// Aspect ratios accepted on /generate
"supports_aspect_ratio": true,
"aspect_ratios": [
{ "id": 1, "ratio": "16:9", "label": "Wide" },
{ "id": 2, "ratio": "9:16", "label": "Tall" }
]
}
Image models that vary aspect ratio include an equivalent aspect_ratios array (image-side has 6 entries: square, vertical, horizontal, wide, tall, plus match_input_image for img2img modes).
How to use these fields
supported_durations— pass any value here viaseconds. Unsupported values snap server-side and are reported underadjustments.seconds.qualities— to switch resolution, look up themodel_idfor the resolution you want and pass that as yourmodel_id. (Resolutions are sibling models, not a runtime parameter.)supports_audio— whentrue, you can pass"generate_audio": trueon/generate. Whenfalse, the flag is ignored.supports_end_frame— whentrue, you can pairimage_url(start frame) withending_frame_urlfor seamless transitions or loops.aspect_ratios— pass theid(integer) orratio(string) under theaspect_ratiofield on/generate. Both forms work.
GET /models/{type}/{id}
Get a specific model's details and pricing.
curl https://generor.com/api/v1/models/image/10001
Users
GET /users/me AUTH
Get your profile, credit balance, and stats.
curl https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_..."
Response:
{
"success": true,
"data": {
"user_id": 42,
"username": "johndoe",
"email": "john@example.com",
"avatar": null,
"bio": "I make things with AI",
"website": "https://example.com",
"joined": "2025-01-15 10:30:00",
"credits": {
"total": 1250,
"paid": 1000,
"free": 200,
"earned": 50,
"max": 250
},
"creation_count": 347,
"follower_count": 12,
"following_count": 5,
"teams": [...]
}
}
PATCH /users/me AUTH
Update your profile.
curl -X PATCH https://generor.com/api/v1/users/me \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"bio": "Updated bio", "website": "https://example.com"}'
GET /users/{username}
Get a user's public profile.
curl https://generor.com/api/v1/users/johndoe
GET /users/{username}/creations
List a user's public creations. Supports pagination.
GET /users/{username}/followers
List a user's followers. Supports pagination.
GET /users/{username}/following
List who a user follows. Supports pagination.
POST /users/{username}/follow AUTH
Follow a user.
curl -X POST https://generor.com/api/v1/users/johndoe/follow \
-H "Authorization: Bearer gnr_live_..."
DELETE /users/{username}/follow AUTH
Unfollow a user.
GET /users/{username}/follow AUTH
Check if you follow a user. Returns {"following": true/false}.
Teams
All team endpoints require authentication.
GET /teams AUTH
List your teams.
POST /teams AUTH
Create a new team.
curl -X POST https://generor.com/api/v1/teams \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "My Creative Team"}'
GET /teams/{id} AUTH
Get team details with member list.
DELETE /teams/{id} AUTH
Leave a team.
POST /teams/{id}/members AUTH
Add a member by username: {"username": "janedoe"}
DELETE /teams/{id}/members/{user_id} AUTH
Remove a team member (owner only).
POST /teams/join/{invite_code} AUTH
Join a team via invite code.
POST /teams/{id}/invite AUTH
Regenerate invite code (owner only).
GET /teams/{id}/creations AUTH
List team creations. Supports pagination.
Comments
GET /creations/{id}/comments
List comments on a creation. Supports pagination.
curl https://generor.com/api/v1/creations/12345/comments
POST /creations/{id}/comments AUTH
Add a comment.
curl -X POST https://generor.com/api/v1/creations/12345/comments \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"text": "Great creation!", "parent_id": null}'
DELETE /comments/{id} AUTH
Delete your own comment.
POST /comments/{id}/vote AUTH
Vote on a comment: {"vote": "up"} or {"vote": "down"}
Ratings
GET /creations/{id}/rating
Get average rating for a creation.
// Response:
{"success": true, "data": {"creation_id": 12345, "average": 4.2, "count": 15}}
POST /creations/{id}/rating AUTH
Rate a creation (1-5). Updates existing rating if already rated.
curl -X POST https://generor.com/api/v1/creations/12345/rating \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"score": 5}'
Credits
Credits are the payment system used for AI generations, denominated in USD.
GET /credits/balance AUTH
Get your current credit balance.
curl https://generor.com/api/v1/credits/balance \
-H "Authorization: Bearer gnr_live_..."
// Response:
{
"success": true,
"data": {
"total": 1250,
"paid": 1000,
"free": 200,
"earned": 50,
"max": 250
}
}
GET /credits/transactions AUTH
Get credit transaction history.
curl "https://generor.com/api/v1/credits/transactions?type=spend&page=1" \
-H "Authorization: Bearer gnr_live_..."
Query params: type (spend, purchase, daily_bonus, weekly_bonus, signup_bonus, refund, gift_sent, gift_received), page, per_page
Feed
GET /feed AUTH
Get public creations from users you follow.
curl "https://generor.com/api/v1/feed?generator=image&page=1" \
-H "Authorization: Bearer gnr_live_..."
Query params: generator (filter by slug), page, per_page
API Keys
Manage your own API keys programmatically. All endpoints require authentication.
GET /api-keys AUTH
List your API keys (shows prefix, not full key).
POST /api-keys AUTH
Create a new API key. The full key is shown only once in the response.
curl -X POST https://generor.com/api/v1/api-keys \
-H "Authorization: Bearer gnr_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "My App", "scopes": ["read", "generate"]}'
// Response (201):
{
"success": true,
"data": {
"key_id": 1,
"api_key": "gnr_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"prefix": "gnr_live_a1b2c3d4",
"name": "My App",
"scopes": ["read", "generate"],
"message": "Save this API key now. It will not be shown again."
}
}
Maximum 10 active keys per account.
DELETE /api-keys/{id} AUTH
Revoke an API key (deactivates it immediately).
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid API key |
FORBIDDEN | 403 | Valid key but insufficient permissions or scope |
NOT_FOUND | 404 | Resource does not exist |
METHOD_NOT_ALLOWED | 405 | HTTP method not supported for this endpoint |
VALIDATION_ERROR | 400 | Invalid input parameters |
INSUFFICIENT_CREDITS | 402 | Not enough credits for generation |
RATE_LIMIT_EXCEEDED | 429 | Too many requests, check Retry-After header |
SERVER_ERROR | 500 | Internal server error |
