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}/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": 3
}'
# 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). |
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. |
Response (201 Created) — Text generator example:
{
"success": true,
"data": {
"generator": "joke",
"model_id": 3,
"model_type": "text",
"model_name": "gpt-5-nano",
"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,
"credits_remaining": 36024
}
}
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": 6,
"credits_remaining": 36016
}
}
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
}
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 |
