Developers
Krixy API and MCP
Call image, video and audio generation from your own app or AI assistant. Responses never include provider names or USD amounts; cost is reported in credits only.
Getting started
- Create an API key under Account → API. The key (wc_live_…) and the webhook signing secret (whsec_…) are shown only once; store them safely.
- The base URL is below. All endpoints use HTTPS and JSON.
- Your first request: list the models.
Base URL
https://krixy.ai/api/v1| Method | Path | Scope | What it does |
|---|---|---|---|
| GET | /modeller | oku | Lists the tools and the models you can use, with their settings and credit price. |
| POST | /tahmin | oku | Returns a credit estimate and routing decision without creating a job. |
| POST | /dosyalar | uret | Uploads a reference file (multipart field dosya, max 10 MB) or fetches one from a URL with JSON {url}. |
| POST | /isler | uret | Creates a generation job. The Idempotency-Key header is required (8–128 characters). |
| GET | /isler/{id} | oku | Returns the job status, progress and, once finished, the output links. |
| GET | /bakiye | oku | Credit balance, daily limit and the key's monthly limit. |
| GET | /kisiler | oku | Lists the people in a video with their numbers and the seconds they appear (?video=file id); call again while it is preparing. |
| POST | /kisi-degistir | uret | Opens a person-swap request: video + person + photo match; returns sample frames and credits. This step is free. |
| GET | /kisi-degistir/{id} | oku | Returns the person-swap request status, sample frames and next step. |
| POST | /kisi-degistir/{id}/onay | uret | Approves the next paid step (frame editing, frame approval, video). Credits are spent only on this endpoint. |
| GET | /medya/{id} | — | Signed output links (valid for 15 minutes; no authentication). Not built by hand; they come from the job response. |
The same Idempotency-Key with the same body returns the same job with 200 within 24 hours (credits are not charged twice). The same key with a different body returns 409. A new job returns 201.
Authentication
Send the key as a Bearer token in the Authorization header on every request. Never put the key in a URL or in client-side code that runs in a browser; keep it on your own server only.
Create a key in My Account → API keys; the secret key is shown only once. Create API key
Authorization: Bearer wc_live_...Scopes
oku— GET /modeller, POST /tahmin, GET /isler/{id}, GET /bakiyeuret— POST /isler, POST /dosyalar (includes the oku scope)
Quickstart
In the examples, use your own key in place of KEY and read it from an environment variable. List the models first to get valid model values.
1. List models
# Read the key from an environment variable
export KRIXY_API_KEY="wc_live_..."
curl https://krixy.ai/api/v1/modeller \
-H "Authorization: Bearer $KRIXY_API_KEY"2. Estimate credits
curl -X POST https://krixy.ai/api/v1/tahmin \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"otomatik","kategori":"gorsel","prompt":"A lighthouse on a cliff at sunset, cinematic","ayarlar":{"oran":"16:9","adet":1}}'3. Upload a reference from a URL
curl -X POST https://krixy.ai/api/v1/dosyalar \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/referans.jpg"}'4. Create a job
curl -X POST https://krixy.ai/api/v1/isler \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"model":"otomatik","kategori":"gorsel","prompt":"Same scene, watercolor style","referanslar":[{"dosya":"DOSYA_ID","rol":"referans"}]}'5. Poll until the job is done
curl https://krixy.ai/api/v1/isler/IS_ID \
-H "Authorization: Bearer $KRIXY_API_KEY"Models
The tools and models you can use; each model's settings (key, type, values, default) and typical credits. Pass the slug or id in the model field of a job.
/api/v1/modellerokuRequest
curl https://krixy.ai/api/v1/modeller \
-H "Authorization: Bearer $KRIXY_API_KEY"Response · 200
{
"araclar": [
{
"arac": "gorsel/olustur",
"kategori": "gorsel",
"gorevler": [
"t2i",
"i2i"
],
"modeller": [
"flux-schnell",
"flux-dev",
"flux-2-dev",
"seedream-4",
"nano-banana",
"flux-dev-i2i",
"nano-banana-edit",
"seedream-4-edit",
"flux-kontext-pro",
"qwen-image-edit",
"z-image-turbo",
"flux-kontext-dev",
"seedream-4-5",
"seedream-5-lite",
"flux-2-pro",
"flux-2-flex",
"flux-kontext-max",
"nano-banana-pro",
"nano-banana-2",
"nano-banana-2-lite",
"nano-banana-2-1",
"gpt-image-2",
"gpt-image-1-mini",
"gpt-image-2-5-sunburst",
"gpt-image-2-5-flare",
"grok-imagine-image-2-0",
"seedream-5-0-flash",
"seedream-5-0-pro",
"imagen-4-0",
"wan-2-7-image",
"wan-2-7-image-pro",
"grok-imagine",
"qwen-image-2",
"qwen-image-2-1",
"qwen-image-3-0",
"qwen-image-3-0-pro",
"z-image-pro",
"flux-2-max",
"flux-3-image",
"midjourney-v7",
"midjourney-v8"
]
}
],
"modeller": [
{
"id": "01M53CYS5HDH5DV3ZT8Y1F4P9J",
"slug": "flux-schnell",
"ad": "FLUX.1 [schnell]",
"kategori": "image",
"gorevler": [
"t2i"
],
"aciklama": "En hızlı ve en ucuz FLUX; taslak ve hızlı deneme için.",
"kredi": 1,
"ayarlar": [
{
"anahtar": "oran",
"ad": "En-boy oranı",
"tur": "enum",
"secenekler": [
"1:1",
"16:9",
"9:16",
"4:3",
"3:4",
"3:2",
"2:3",
"21:9"
],
"varsayilan": "1:1",
"rol": "oran"
},
{
"anahtar": "cozunurluk",
"ad": "Çözünürlük",
"tur": "enum",
"secenekler": [
"standart",
"yuksek"
],
"varsayilan": "standart",
"rol": "cozunurluk"
},
{
"anahtar": "num_inference_steps",
"ad": "Adım sayısı",
"tur": "int",
"min": 1,
"max": 12,
"varsayilan": 4,
"rol": "adimlar"
},
{
"anahtar": "guidance_scale",
"ad": "Guidance (CFG)",
"tur": "number",
"min": 1,
"max": 20,
"adim": 0.1,
"varsayilan": 3.5,
"rol": "guidance"
},
{
"anahtar": "output_format",
"ad": "Çıktı biçimi",
"tur": "enum",
"secenekler": [
"jpeg",
"png"
],
"varsayilan": "jpeg",
"rol": "format"
},
{
"anahtar": "acceleration",
"ad": "Hızlandırma",
"tur": "enum",
"secenekler": [
"none",
"regular",
"high"
],
"varsayilan": "none",
"rol": "diger"
}
],
"girdi": {
"gorsel": 0,
"video": 0,
"ses": 0,
"roller": [],
"baslangicZorunlu": false,
"kareRefAyri": false
},
"azami_adet": 4,
"prompt_gerekli": true
}
]
}FLUX.1 [schnell]flux-schnellImage1
En hızlı ve en ucuz FLUX; taslak ve hızlı deneme için.
Tasks: t2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
| num_inference_steps | Adım sayısı | int | 1 – 12 | 4 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 3.5 |
| output_format | Çıktı biçimi | enum | jpeg, png | jpeg |
| acceleration | Hızlandırma | enum | none, regular, high | none |
FLUX.1 [dev]flux-devImage1
FLUX.1 [dev]: dengeli kalite, ayrıntılı kontrol.
Tasks: t2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
| num_inference_steps | Adım sayısı | int | 1 – 50 | 28 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 3.5 |
| output_format | Çıktı biçimi | enum | jpeg, png | jpeg |
| acceleration | Hızlandırma | enum | none, regular, high | none |
FLUX.2 [dev]flux-2-devImage1
FLUX.2 [dev]: yeni nesil FLUX, iyi prompt uyumu.
Tasks: t2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
| num_inference_steps | Adım sayısı | int | 4 – 50 | 28 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 2.5 |
| output_format | Çıktı biçimi | enum | jpeg, png | png |
| acceleration | Hızlandırma | enum | none, regular, high | regular |
| enable_prompt_expansion | Prompt'u genişlet | boolean | — | false |
Seedream 4.0seedream-4Image3
ByteDance Seedream 4: yüksek çözünürlüklü, sinematik.
Tasks: t2i · Typical credits: 3
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek, cokyuksek | standart |
| enhance_prompt_mode | Prompt iyileştirme modu | enum | standard, fast | standard |
Nano Banananano-bananaImage2
Google Nano Banana: güçlü prompt uyumu ve metin.
Tasks: t2i · Typical credits: 2
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 | 1:1 |
| output_format | Çıktı biçimi | enum | jpeg, png | png |
| safety_tolerance | Güvenlik toleransı | enum | 1, 2, 3, 4, 5, 6 | 4 |
FLUX.1 [dev]flux-dev-i2iImage4
FLUX.1 [dev] görselden görsele: referansı dönüştürür.
Tasks: i2i · Typical credits: 4
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| strength | Dönüşüm gücü | number | 0.01 – 1 | 0.95 |
| num_inference_steps | Adım sayısı | int | 10 – 50 | 40 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 3.5 |
| output_format | Çıktı biçimi | enum | jpeg, png | jpeg |
| acceleration | Hızlandırma | enum | none, regular, high | none |
Nano Banana Editnano-banana-editImage2
Nano Banana düzenleme: çoklu referansla düzenle.
Tasks: i2i · Typical credits: 2
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | auto, 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 | auto |
| output_format | Çıktı biçimi | enum | jpeg, png | png |
| safety_tolerance | Güvenlik toleransı | enum | 1, 2, 3, 4, 5, 6 | 4 |
Seedream 4.0 Editseedream-4-editImage3
Seedream 4 düzenleme: en fazla 10 referans.
Tasks: i2i · Typical credits: 3
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek, cokyuksek | standart |
| enhance_prompt_mode | Prompt iyileştirme modu | enum | standard, fast | standard |
FLUX.1 Kontext [pro]flux-kontext-proImage4
FLUX Kontext Pro: tek görselde yönergeyle düzenleme.
Tasks: i2i · Typical credits: 4
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21 | 1:1 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 3.5 |
| output_format | Çıktı biçimi | enum | jpeg, png | jpeg |
| safety_tolerance | Güvenlik toleransı | enum | 1, 2, 3, 4, 5, 6 | 2 |
| enhance_prompt | Prompt'u iyileştir | boolean | — | false |
Qwen Image Editqwen-image-editImage4
Qwen Image Edit: tek görsel düzenleme, negatif prompt destekli.
Tasks: i2i · Typical credits: 4
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
| negative_prompt | Negatif prompt | text | — | — |
| num_inference_steps | Adım sayısı | int | 2 – 50 | 30 |
| guidance_scale | Guidance (CFG) | number | 1 – 20 | 4 |
| output_format | Çıktı biçimi | enum | jpeg, png | png |
| acceleration | Hızlandırma | enum | none, regular, high | regular |
Z-Image Turboz-image-turboImage1
Çok hızlı ve ucuz metinden görsel.
Tasks: t2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 | 1:1 |
| num_inference_steps | Adım sayısı | int | 1 – 50 | 8 |
FLUX Kontext devflux-kontext-devImage1
Referans görselle yönergeli düzenleme.
Tasks: i2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| num_inference_steps | Adım sayısı | int | 1 – 100 | 28 |
Seedream 4.5seedream-4-5Image4
ByteDance Seedream 4.5: 2K/4K metinden görsel ve çoklu referansla düzenleme (en fazla 14 referans).
Tasks: t2i, i2i · Typical credits: 4
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9 | 1:1 |
| cozunurluk | Çözünürlük | enum | 2K, 4K | 2K |
Seedream 5.0 Liteseedream-5-liteImage4
ByteDance Seedream 5.0 Lite: 2K/3K metinden görsel ve referansla düzenleme.
Tasks: t2i, i2i · Typical credits: 4
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 2:1, 1:2 | 1:1 |
| cozunurluk | Çözünürlük | enum | 2K, 3K, 4K | 2K |
FLUX.2 [pro]flux-2-proImage3
Black Forest Labs FLUX.2 [pro]: yüksek kaliteli metinden görsel ve 9 referansa kadar düzenleme.
Tasks: t2i, i2i · Typical credits: 3
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 9:21 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
FLUX.2 [flex]flux-2-flexImage7
Tasks: t2i, i2i · Typical credits: 7
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 9:21 | 1:1 |
| cozunurluk | Çözünürlük | enum | standart, yuksek | standart |
FLUX.1 Kontext [max]flux-kontext-maxImage8
Kontext'in en yüksek kaliteli varyantı (ayrı model): yönergeli düzenleme, 2 referansa kadar.
Tasks: i2i · Typical credits: 8
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21 | 1:1 |
Nano Banana Pronano-banana-proImage3
Google Gemini 3 Pro Image (Nano Banana Pro): 1K/2K/4K, 14 referansa kadar çoklu görselle düzenleme.
Tasks: t2i, i2i · Typical credits: 3
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 4:5, 5:4, 21:9, 1:4, 4:1, 1:8, 8:1 | 1:1 |
| cozunurluk | Çözünürlük | enum | 1K, 2K, 4K | 1K |
| batch | Hız | boolean | — | true |
Nano Banana 2nano-banana-2Image2
Google Gemini 3.1 Flash Image (Nano Banana 2): hızlı, 1K/2K/4K, çoklu referans.
Tasks: t2i, i2i · Typical credits: 2
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 4:5, 5:4, 21:9, 1:4, 4:1, 1:8, 8:1 | 1:1 |
| cozunurluk | Çözünürlük | enum | 1K, 2K, 4K, 0.5K | 1K |
| batch | Hız | boolean | — | true |
Nano Banana 2 Litenano-banana-2-liteImage1
Google Gemini 3.1 Flash-Lite Image: çok hızlı ve ucuz 1K görsel; çoklu referans için optimize değil. Yavaş modda toplu işlem.
Tasks: t2i, i2i · Typical credits: 1
| Field | Name | Type | Values | Default |
|---|---|---|---|---|
| oran | En-boy oranı | enum | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 4:5, 5:4, 21:9, 1:4, 4:1, 1:8, 8:1 | 1:1 |
| cozunurluk | Çözünürlük | enum | 1K | 1K |
| batch | Hız | boolean | — | true |
Image generation
Text to image. With model: "otomatik" you must send kategori: "gorsel"; settings follow the model's settings (oran, adet, cozunurluk, parametreler).
/api/v1/isleruretRequest
curl -X POST https://krixy.ai/api/v1/isler \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"model":"flux-schnell","prompt":"A lighthouse on a cliff at sunset, cinematic","ayarlar":{"oran":"1:1","adet":1}}'Response · 201
{
"id": "01JZ8Q4W6E5T3R2Y1U0I9O8P7A",
"durum": "sirada",
"ilerleme": null,
"asama": null,
"gorev": "t2i",
"model": {
"id": "01M53CYS5HDH5DV3ZT8Y1F4P9J",
"slug": "flux-schnell",
"ad": "FLUX.1 [schnell]"
},
"prompt": "A lighthouse on a cliff at sunset, cinematic",
"kredi": 1,
"olusturma": "2026-11-08T10:00:00.000Z",
"bitis": null,
"hata": null,
"ciktilar": []
}Video generation
Text or image to video. For image to video, pass an image in referanslar[] with role "baslangic"; duration and ratio come from the model's values.
/api/v1/isleruretRequest
curl -X POST https://krixy.ai/api/v1/isler \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"model":"seedance-1-lite-t2v-480p","prompt":"Slow drone shot over a misty forest at dawn","ayarlar":{"sure":5,"oran":"16:9"}}'Response · 201
{
"id": "01JZ8Q4W6E5T3R2Y1U0I9O8P7A",
"durum": "sirada",
"ilerleme": null,
"asama": null,
"gorev": "t2v",
"model": {
"id": "01M53CYS6BDKD3Z8DANR04S9Z6",
"slug": "seedance-1-lite-t2v-480p",
"ad": "Seedance 1.0 Lite 480p"
},
"prompt": "Slow drone shot over a misty forest at dawn",
"kredi": 8,
"olusturma": "2026-11-08T10:00:00.000Z",
"bitis": null,
"hata": null,
"ciktilar": []
}Audio
Voiceover, music and sound effects: arac "ses/seslendirme", "ses/muzik" or "ses/efekt" and a model of that tool.
/api/v1/isleruretRequest
curl -X POST https://krixy.ai/api/v1/isler \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"model":"minimax-speech-02-hd","arac":"ses/seslendirme","prompt":"Hoş geldiniz! Bugün size yeni koleksiyonumuzu tanıtacağız."}'Response · 201
{
"id": "01JZ8Q4W6E5T3R2Y1U0I9O8P7A",
"durum": "sirada",
"ilerleme": null,
"asama": null,
"gorev": "tts",
"model": {
"id": "01M53CYS7346JVEJ04NXK50GZR",
"slug": "minimax-speech-02-hd",
"ad": "MiniMax Speech-02 HD"
},
"prompt": "Hoş geldiniz! Bugün size yeni koleksiyonumuzu tanıtacağız.",
"kredi": 5,
"olusturma": "2026-11-08T10:00:00.000Z",
"bitis": null,
"hata": null,
"ciktilar": []
}Editing tools
Tools such as upscaling, background removal, face swap and video editing: arac + (when needed) gorev + referanslar[]. The tool list and each tool's models are in the araclar[] field of GET /modeller.
/api/v1/isleruretRequest
curl -X POST https://krixy.ai/api/v1/isler \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"model":"clarity-upscaler","arac":"gorsel/iyilestir","gorev":"upscale","referanslar":[{"dosya":"DOSYA_ID","rol":"kaynak"}]}'Response · 201
{
"id": "01JZ8Q4W6E5T3R2Y1U0I9O8P7A",
"durum": "sirada",
"ilerleme": null,
"asama": null,
"gorev": "upscale",
"model": {
"id": "01M53CYS7FPFGXB3QCBMPQQ4PV",
"slug": "clarity-upscaler",
"ad": "Clarity Upscaler"
},
"prompt": "",
"kredi": 2,
"olusturma": "2026-11-08T10:00:00.000Z",
"bitis": null,
"hata": null,
"ciktilar": []
}Job status and webhooks
Job status, progress and outputs. Output URLs are signed links valid for 15 minutes; query the job again when they expire.
/api/v1/isler/IS_IDokuRequest
curl "https://krixy.ai/api/v1/isler/$IS_ID" \
-H "Authorization: Bearer $KRIXY_API_KEY"Response · 200
{
"id": "01JZ8Q4W6E5T3R2Y1U0I9O8P7A",
"durum": "tamamlandi",
"ilerleme": 100,
"asama": null,
"gorev": "t2i",
"model": {
"id": "01M53CYS5HDH5DV3ZT8Y1F4P9J",
"slug": "flux-schnell",
"ad": "FLUX.1 [schnell]"
},
"prompt": "A lighthouse on a cliff at sunset, cinematic",
"kredi": 1,
"olusturma": "2026-11-08T10:00:00.000Z",
"bitis": "2026-11-08T10:00:21.000Z",
"hata": null,
"ciktilar": [
{
"id": "01JZ8Q5B4N3M2L1K0J9H8G7F6D",
"tur": "image",
"mime": "image/png",
"genislik": 1344,
"yukseklik": 768,
"sure": null,
"url": "https://krixy.ai/api/v1/medya/01JZ8Q5B4N3M2L1K0J9H8G7F6D?v=…",
"onizleme_url": "https://krixy.ai/api/v1/medya/01JZ8Q5B4N3M2L1K0J9H8G7F6D?v=preview&…",
"kucuk_url": "https://krixy.ai/api/v1/medya/01JZ8Q5B4N3M2L1K0J9H8G7F6D?v=thumb&…",
"url_bitis": "2026-11-08T10:15:21.000Z"
}
]
}Webhook
If you pass webhook_url (https) in the job request, a signed POST is sent to it when the job ends. Body: { olay, teslim, zaman, is }. olay values: is.tamamlandi, is.basarisiz, is.iptal.
Headers
Webcolik-Imza: t=<unix seconds>,v1=<hex>. v1 is the HMAC-SHA256 of the text "<t>.<raw body>" using the key's secret (whsec_…). Verify against the raw body before parsing; reject timestamps older than 5 minutes and compare in constant time.
Webcolik-Olay carries the event name and Webcolik-Teslim the delivery id (do not process the same delivery twice).
A non-2xx response or a 10-second timeout is retried after 1 min, 5 min, 30 min, 2 h and 6 h (6 attempts in total).
Verification: JavaScript (Node)
import { createHmac, timingSafeEqual } from "node:crypto"
// Raw body: before JSON.parse
export function imzaDogru(sir, baslik, hamGovde) {
const m = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(baslik ?? "")
if (!m) return false
if (Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false // Reject requests older than 5 minutes
const beklenen = createHmac("sha256", sir).update(`${m[1]}.${hamGovde}`).digest("hex")
const a = Buffer.from(beklenen)
const b = Buffer.from(m[2])
return a.length === b.length && timingSafeEqual(a, b) // Constant-time comparison
}Verification: Python
import hashlib, hmac, re, time
# Raw body: before JSON.parse
def imza_dogru(sir: str, baslik: str, ham_govde: bytes) -> bool:
m = re.fullmatch(r"t=(\d+),v1=([a-f0-9]{64})", baslik or "")
if not m:
return False
if abs(time.time() - int(m.group(1))) > 300: # Reject requests older than 5 minutes
return False
beklenen = hmac.new(sir.encode(), m.group(1).encode() + b"." + ham_govde, hashlib.sha256).hexdigest()
return hmac.compare_digest(beklenen, m.group(2)) # Constant-time comparisonFile upload
Reference file: multipart/form-data (field dosya, up to 10 MB) or JSON { url } for large files. The returned id goes into referanslar[].dosya of a job.
/api/v1/dosyalaruretRequest
curl -X POST https://krixy.ai/api/v1/dosyalar \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-F "dosya=@referans.png"Response · 201
{
"id": "01JZ8Q3K2M1N0B9V8C7X6Z5L4K",
"tur": "image",
"mime": "image/png",
"boyut": 48213,
"genislik": 1024,
"yukseklik": 1024,
"sure": null
}/api/v1/dosyalaruretRequest
curl -X POST https://krixy.ai/api/v1/dosyalar \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/referans.jpg"}'Response · 201
{
"id": "01JZ8Q3K2M1N0B9V8C7X6Z5L4K",
"tur": "image",
"mime": "image/jpeg",
"boyut": 182644,
"genislik": 1600,
"yukseklik": 1200,
"sure": null
}Credit estimate
Credit estimate without creating a job (same fields as a job) and balance. Estimates do not spend credits.
/api/v1/tahminokuRequest
curl -X POST https://krixy.ai/api/v1/tahmin \
-H "Authorization: Bearer $KRIXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"flux-schnell","prompt":"A lighthouse on a cliff at sunset, cinematic","ayarlar":{"oran":"1:1","adet":1}}'Response · 200
{
"kredi": 1,
"kesinlesir": false,
"yaklasik": false,
"bakiye": 1200,
"uretilebilir": true,
"engel": null,
"karar": {
"gorev": "t2i",
"video_modu": null,
"model": {
"id": "01M53CYS5HDH5DV3ZT8Y1F4P9J",
"ad": "FLUX.1 [schnell]",
"otomatik": false
}
},
"uyarilar": []
}/api/v1/bakiyeokuRequest
curl https://krixy.ai/api/v1/bakiye \
-H "Authorization: Bearer $KRIXY_API_KEY"Response · 200
{
"kredi": 1200,
"sinirsiz": false,
"gunluk": {
"harcanan": 0,
"sinir": null
},
"anahtar": null
}Errors
Error bodies always have the same shape: { hata: { kod, mesaj, mesaj_en, ayrinti? } }. The code list never changes, it only grows; branch on the code value, not on message text.
{
"hata": {
"kod": "idempotency_gerekli",
"mesaj": "Idempotency-Key başlığı zorunlu (8–128 karakter).",
"mesaj_en": "The Idempotency-Key header is required (8–128 characters)."
}
}| Code | HTTP | Meaning |
|---|---|---|
| kimlik_gerekli | 401 | Authentication required: send an Authorization: Bearer <key> header. |
| kimlik_gecersiz | 401 | The key or access token is invalid, expired or revoked. |
| kapsam_yetersiz | 403 | The key's scope is insufficient for this operation (required: uret). |
| api_kapali | 503 | The API is currently disabled. |
| hesap_kapali | 403 | The account is not active, awaiting approval or its e-mail is not verified. |
| hiz_siniri | 429 | Per-minute request limit exceeded. Wait for the Retry-After duration. |
| eszamanli_sinir | 429 | Concurrent job limit for this key reached. Retry when one finishes. |
| aylik_sinir | 402 | This key's monthly credit limit has been reached. |
| kredi_yetersiz | 402 | Insufficient credit balance. |
| gunluk_sinir | 402 | Daily credit limit reached. |
| istek_gecersiz | 400 | The request body is invalid. |
| idempotency_gerekli | 400 | The Idempotency-Key header is required (8–128 characters). |
| idempotency_cakisma | 409 | This Idempotency-Key was already used with a different request body. |
| model_yok | 404 | Model not found or not available to your account. |
| dosya_yok | 404 | File not found. |
| is_yok | 404 | Job not found. |
| dosya_turu | 415 | Unsupported or corrupt file (image, video or audio). |
| dosya_boyutu | 413 | The file exceeds the size limit. |
| url_gecersiz | 400 | The URL could not be fetched: it must be a public https address (private network addresses are blocked). |
| baglanti_onay | 400 | Social media links require hak_onayi: true ("I have the right to use this video."). |
| baglanti_erisim | 403 | Adding videos from social links is not enabled for your account. |
| baglanti_limit | 429 | Your daily limit for adding videos from links is used up; try again tomorrow. |
| baglanti_hata | 422 | The video could not be added from the link. |
| baglanti_suruyor | 202 | The video is still being processed; retry with the same link shortly. |
| uyumsuz | 400 | The selected model cannot be used with this request (task, inputs or settings). |
| icerik_onayi_gerekli | 403 | Requests containing real people require the Content Rights Consent: confirm the people's consent with the user and resend the request with icerik_onayi: { onay: true, surum } in the body (see hata.icerik_onayi). |
| fiyat_bilinmiyor | 402 | The price of this request cannot be calculated right now; choose another model or setting. |
| uretilemiyor | 422 | The job could not be created. |
| akis_yok | 404 | Flow not found. |
| dugum_yok | 404 | Node not found. |
| baglanti_yok | 404 | Connection not found. |
| baglanti_kurulamadi | 400 | The connection could not be made. |
| etiket_yok | 400 | A tag in the prompt cannot be used. |
| akis_sorunu | 400 | The flow has problems to fix. |
| akis_calisiyor | 409 | This flow is already running. |
| akis_cakisma | 409 | The flow changed elsewhere; try again. |
| sunucu_hatasi | 500 | An unexpected error occurred. |
For failed jobs, hata.kod is one of: icerik_reddi (rejected by content rules), zaman_asimi (timed out), iptal (canceled), uretim_basarisiz (generation failed)
Limits
- Per-minute request limit: per key (default 60; an admin can change it). Exceeding it returns 429
hiz_siniriwith aRetry-Afterheader. - Concurrent jobs: per key (default 3). Exceeding it returns 429
eszamanli_sinir; retry when a job finishes. - Monthly credit limit: optionally set on a key. When reached: 402
aylik_sinir. - File upload: max 10 MB; for larger video / audio use JSON
{url}. Also 30 requests per minute per file endpoint. - If your balance or daily limit is not enough: 402
kredi_yetersiz/gunluk_sinir. The estimate endpoint tells you in advance.
MCP connection
Krixy also runs as a Model Context Protocol (MCP) server, so assistants such as Claude and ChatGPT can use its tools directly.
Server URL
https://krixy.ai/mcpStreamable HTTP; MCP specification 2026-07-28, backward compatible with 2025 clients.
Sign-in: OAuth 2.1 with your krixy.ai account. Developers can alternatively send an API key as a Bearer token to the same URL.
Tools
modelleri_listele— Lists the models you can use and their settings.kredi_tahmini— Returns the credit estimate and model decision for a request without creating a job.gorsel_uret— Generates an image.video_uret— Generates a video.video_duzenle— Edits an existing video.is_durumu— Returns the status and outputs of a job.bakiye— Shows your credit balance and limits.referans_ekle— Adds a reference file: chat attachment (ChatGPT), public URL or base64.yukleme_baglantisi— Returns a one-time upload link (15 minutes) for uploading from a phone (clients that cannot pass files).yukleme_durumu— Returns an upload link's status and the uploaded file ids.videodaki_kisiler— Lists the people in a video with their numbers.kisi_degistir— Opens a person-swap request; shows the sample frames and credits.kisi_degistir_onay— Approves the next paid person-swap step (frame editing, frame approval, video).akis_listele— Lists your flows (accounts with Flows enabled).akis_oku— Returns a flow's nodes: tag, thumbnail, prompt, mode, model, settings, connections, last output.akis_olustur— Creates an empty flow.dugum_ekle— Adds an image, video, audio, text or generation node; its position is chosen automatically.dugum_guncelle— Changes a node's prompt, mode, model and settings.baglan— Connects two nodes; the input is chosen by type.baglanti_sil— Removes a connection.dugum_sil— Removes a node and its connections.calistir— Runs a node or the whole flow and returns the credit estimate; kuru: true only estimates.akis_durumu— Returns running nodes, outputs and thumbnails.
Setup by tool
Steps, server address and copyable snippets for each tool, plus the apps connected to your account: Integrations page
Claude
You need a Krixy account first; you will sign in with it while connecting.
This link opens Claude's add connector dialog. If it does not open, follow the steps below.
Add manually
- 1In Claude open Customize → Connectors, then click + Add → Add custom connector.
- 2Enter Krixy as the name, paste the address below into MCP server URL and click Add.
- 3Click Connect next to the connector.
- 4On the Krixy page that opens, sign in and click Allow.
MCP server address
https://krixy.ai/mcpClaude Code
You need a Krixy account first; you will sign in with it while connecting.
- 1
Type this in Claude Code:
Add the Krixy MCP server: https://krixy.ai/mcp - 2Then type /mcp, select krixy and choose Authenticate; sign in on the Krixy page that opens.
Troubleshooting: If you see “Server not found”, open /mcp, disable the old Krixy connector listed under claude.ai and follow the step above.
Prefer the terminal?
- 1Run the command below in your terminal (--scope user makes it available in all your projects).
- 2In Claude Code type /mcp, select krixy and choose Authenticate (or run the sign-in command in your terminal).
- 3On the Krixy page that opens in your browser, sign in and click Allow.
Command
claude mcp add --transport http --scope user krixy https://krixy.ai/mcpSign-in command
claude mcp login krixyConnect with an API key (optional)
For environments that cannot complete an OAuth sign-in (servers, CI). Replace the placeholder with your own key; the key is never written to this page.
Command
claude mcp add --transport http --scope user krixy https://krixy.ai/mcp --header "Authorization: Bearer <YOUR_API_KEY>"ChatGPT
You need a Krixy account first; you will sign in with it while connecting.
Steps
- 1In ChatGPT (web) turn on Developer mode under Settings → Apps / Connectors → Advanced.
- 2Open chatgpt.com/plugins, click the + button and Add custom MCP server.
- 3Enter Krixy as the name; under Connection paste the address below into Server URL.
- 4Choose OAuth for authentication, confirm I understand and want to continue and click Create as a plugin.
- 5Install the plugin; on the Krixy page sign in and click Allow.
MCP server address
https://krixy.ai/mcpCursor
You need a Krixy account first; you will sign in with it while connecting.
Add manually
- 1Click Add to Cursor; Cursor opens and asks you to confirm the install.
- 2If the button does not work, add the snippet below to ~/.cursor/mcp.json (or .cursor/mcp.json for this project only).
- 3When the MCP list in Cursor settings asks krixy to sign in, connect; on the Krixy page sign in and click Allow.
MCP server address
https://krixy.ai/mcpConfiguration (~/.cursor/mcp.json)
{
"mcpServers": {
"krixy": {
"url": "https://krixy.ai/mcp"
}
}
}Connect with an API key (optional)
For environments that cannot complete an OAuth sign-in (servers, CI). Replace the placeholder with your own key; the key is never written to this page. Put the key in the KRIXY_API_KEY environment variable.
Configuration (~/.cursor/mcp.json)
{
"mcpServers": {
"krixy": {
"url": "https://krixy.ai/mcp",
"headers": {
"Authorization": "Bearer ${env:KRIXY_API_KEY}"
}
}
}
}VS Code
You need a Krixy account first; you will sign in with it while connecting.
Add manually
- 1Click Add to VS Code; VS Code opens, confirm with Install.
- 2Or in the Command Palette (Ctrl+Shift+P) choose MCP: Add Server → HTTP, paste the address below and name it krixy.
- 3When the server starts for the first time, allow the sign-in request; on the Krixy page sign in and click Allow.
MCP server address
https://krixy.ai/mcpConfiguration (.vscode/mcp.json)
{
"servers": {
"krixy": {
"type": "http",
"url": "https://krixy.ai/mcp"
}
}
}Connect with an API key (optional)
For environments that cannot complete an OAuth sign-in (servers, CI). Replace the placeholder with your own key; the key is never written to this page.
Configuration (.vscode/mcp.json)
{
"inputs": [
{
"type": "promptString",
"id": "krixy-key",
"description": "Krixy API key",
"password": true
}
],
"servers": {
"krixy": {
"type": "http",
"url": "https://krixy.ai/mcp",
"headers": {
"Authorization": "Bearer ${input:krixy-key}"
}
}
}
}Codex
You need a Krixy account first; you will sign in with it while connecting.
Steps
- 1Run the add command in your terminal (or add the snippet to ~/.codex/config.toml).
- 2Run the sign-in command; on the Krixy page that opens in your browser, sign in and click Allow.
- 3Check that krixy is listed with codex mcp list.
MCP server address
https://krixy.ai/mcpCommand
codex mcp add krixy --url https://krixy.ai/mcpSign-in command
codex mcp login krixyConfiguration (~/.codex/config.toml)
[mcp_servers.krixy]
url = "https://krixy.ai/mcp"Connect with an API key (optional)
For environments that cannot complete an OAuth sign-in (servers, CI). Replace the placeholder with your own key; the key is never written to this page. Put the key in the KRIXY_API_KEY environment variable.
Configuration (~/.codex/config.toml)
[mcp_servers.krixy]
url = "https://krixy.ai/mcp"
bearer_token_env_var = "KRIXY_API_KEY"Gemini CLI
You need a Krixy account first; you will sign in with it while connecting.
Steps
- 1Run the add command in your terminal (or add the snippet to ~/.gemini/settings.json).
- 2Open Gemini CLI and type the sign-in command.
- 3On the Krixy page that opens in your browser, sign in and click Allow.
MCP server address
https://krixy.ai/mcpCommand
gemini mcp add --transport http --scope user krixy https://krixy.ai/mcpSign-in command
/mcp auth krixyConfiguration (~/.gemini/settings.json)
{
"mcpServers": {
"krixy": {
"httpUrl": "https://krixy.ai/mcp"
}
}
}Connect with an API key (optional)
For environments that cannot complete an OAuth sign-in (servers, CI). Replace the placeholder with your own key; the key is never written to this page.
Command
gemini mcp add --transport http --scope user --header "Authorization: Bearer <YOUR_API_KEY>" krixy https://krixy.ai/mcpRelease notes
- 2026-11-08Docs refreshed: request / response examples per endpoint, model settings tables generated from the catalog.
- 2026-11-05MCP: akis_yeniden_adlandir, akis_durdur, akis_sil and akis_geri_al tools.
- 2026-11-02MCP: Flows tools (akis_olustur, dugum_ekle, baglan, calistir, akis_durumu …).
- 2026-10-31MCP: files from chat (yukleme_baglantisi, yukleme_durumu, referans_ekle data field).
- 2026-10-29Content Rights Consent: icerik_onayi field (POST /isler, /tahmin, /kisi-degistir).
- 2026-10-28Person swap endpoints: GET /kisiler, POST /kisi-degistir, POST /kisi-degistir/{id}/onay.
- 2026-10-27POST /dosyalar: video from a social media link (hak_onayi, baslangic_sn).
- 2026-10-26API v1 and MCP server: models, estimate, jobs, files, balance, webhooks, signed media; OAuth 2.1.