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

  1. Create an API key under Account → API. The key (wc_live_…) and the webhook signing secret (whsec_…) are shown only once; store them safely.
  2. The base URL is below. All endpoints use HTTPS and JSON.
  3. Your first request: list the models.

Base URL

https://krixy.ai/api/v1
MethodPathScopeWhat it does
GET/modellerokuLists the tools and the models you can use, with their settings and credit price.
POST/tahminokuReturns a credit estimate and routing decision without creating a job.
POST/dosyalaruretUploads a reference file (multipart field dosya, max 10 MB) or fetches one from a URL with JSON {url}.
POST/isleruretCreates a generation job. The Idempotency-Key header is required (8–128 characters).
GET/isler/{id}okuReturns the job status, progress and, once finished, the output links.
GET/bakiyeokuCredit balance, daily limit and the key's monthly limit.
GET/kisilerokuLists the people in a video with their numbers and the seconds they appear (?video=file id); call again while it is preparing.
POST/kisi-degistiruretOpens a person-swap request: video + person + photo match; returns sample frames and credits. This step is free.
GET/kisi-degistir/{id}okuReturns the person-swap request status, sample frames and next step.
POST/kisi-degistir/{id}/onayuretApproves 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 /bakiye
  • uret — 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.

GET/api/v1/modelleroku

Request

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-schnell1

En hızlı ve en ucuz FLUX; taslak ve hızlı deneme için.

Tasks: t2i · Typical credits: 1

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
num_inference_stepsAdım sayısıint1 – 124
guidance_scaleGuidance (CFG)number1 – 203.5
output_formatÇıktı biçimienumjpeg, pngjpeg
accelerationHızlandırmaenumnone, regular, highnone
FLUX.1 [dev]flux-dev1

FLUX.1 [dev]: dengeli kalite, ayrıntılı kontrol.

Tasks: t2i · Typical credits: 1

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
num_inference_stepsAdım sayısıint1 – 5028
guidance_scaleGuidance (CFG)number1 – 203.5
output_formatÇıktı biçimienumjpeg, pngjpeg
accelerationHızlandırmaenumnone, regular, highnone
FLUX.2 [dev]flux-2-dev1

FLUX.2 [dev]: yeni nesil FLUX, iyi prompt uyumu.

Tasks: t2i · Typical credits: 1

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
num_inference_stepsAdım sayısıint4 – 5028
guidance_scaleGuidance (CFG)number1 – 202.5
output_formatÇıktı biçimienumjpeg, pngpng
accelerationHızlandırmaenumnone, regular, highregular
enable_prompt_expansionPrompt'u genişletboolean—false
Seedream 4.0seedream-43

ByteDance Seedream 4: yüksek çözünürlüklü, sinematik.

Tasks: t2i · Typical credits: 3

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksek, cokyuksekstandart
enhance_prompt_modePrompt iyileştirme moduenumstandard, faststandard
Nano Banananano-banana2

Google Nano Banana: güçlü prompt uyumu ve metin.

Tasks: t2i · Typical credits: 2

FieldNameTypeValuesDefault
oranEn-boy oranıenum21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:161:1
output_formatÇıktı biçimienumjpeg, pngpng
safety_toleranceGüvenlik toleransıenum1, 2, 3, 4, 5, 64
FLUX.1 [dev]flux-dev-i2i4

FLUX.1 [dev] görselden görsele: referansı dönüştürür.

Tasks: i2i · Typical credits: 4

FieldNameTypeValuesDefault
strengthDönüşüm gücünumber0.01 – 10.95
num_inference_stepsAdım sayısıint10 – 5040
guidance_scaleGuidance (CFG)number1 – 203.5
output_formatÇıktı biçimienumjpeg, pngjpeg
accelerationHızlandırmaenumnone, regular, highnone
Nano Banana Editnano-banana-edit2

Nano Banana düzenleme: çoklu referansla düzenle.

Tasks: i2i · Typical credits: 2

FieldNameTypeValuesDefault
oranEn-boy oranıenumauto, 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16auto
output_formatÇıktı biçimienumjpeg, pngpng
safety_toleranceGüvenlik toleransıenum1, 2, 3, 4, 5, 64
Seedream 4.0 Editseedream-4-edit3

Seedream 4 düzenleme: en fazla 10 referans.

Tasks: i2i · Typical credits: 3

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksek, cokyuksekstandart
enhance_prompt_modePrompt iyileştirme moduenumstandard, faststandard
FLUX.1 Kontext [pro]flux-kontext-pro4

FLUX Kontext Pro: tek görselde yönergeyle düzenleme.

Tasks: i2i · Typical credits: 4

FieldNameTypeValuesDefault
oranEn-boy oranıenum21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:211:1
guidance_scaleGuidance (CFG)number1 – 203.5
output_formatÇıktı biçimienumjpeg, pngjpeg
safety_toleranceGüvenlik toleransıenum1, 2, 3, 4, 5, 62
enhance_promptPrompt'u iyileştirboolean—false
Qwen Image Editqwen-image-edit4

Qwen Image Edit: tek görsel düzenleme, negatif prompt destekli.

Tasks: i2i · Typical credits: 4

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
negative_promptNegatif prompttext——
num_inference_stepsAdım sayısıint2 – 5030
guidance_scaleGuidance (CFG)number1 – 204
output_formatÇıktı biçimienumjpeg, pngpng
accelerationHızlandırmaenumnone, regular, highregular
Z-Image Turboz-image-turbo1

Çok hızlı ve ucuz metinden görsel.

Tasks: t2i · Typical credits: 1

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:31:1
num_inference_stepsAdım sayısıint1 – 508
FLUX Kontext devflux-kontext-dev1

Referans görselle yönergeli düzenleme.

Tasks: i2i · Typical credits: 1

FieldNameTypeValuesDefault
num_inference_stepsAdım sayısıint1 – 10028
Seedream 4.5seedream-4-54

ByteDance Seedream 4.5: 2K/4K metinden görsel ve çoklu referansla düzenleme (en fazla 14 referans).

Tasks: t2i, i2i · Typical credits: 4

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:91:1
cozunurlukÇözünürlükenum2K, 4K2K
Seedream 5.0 Liteseedream-5-lite4

ByteDance Seedream 5.0 Lite: 2K/3K metinden görsel ve referansla düzenleme.

Tasks: t2i, i2i · Typical credits: 4

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 2:1, 1:21:1
cozunurlukÇözünürlükenum2K, 3K, 4K2K
FLUX.2 [pro]flux-2-pro3

Black Forest Labs FLUX.2 [pro]: yüksek kaliteli metinden görsel ve 9 referansa kadar düzenleme.

Tasks: t2i, i2i · Typical credits: 3

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 9:211:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
FLUX.2 [flex]flux-2-flex7

Tasks: t2i, i2i · Typical credits: 7

FieldNameTypeValuesDefault
oranEn-boy oranıenum1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 9:211:1
cozunurlukÇözünürlükenumstandart, yuksekstandart
FLUX.1 Kontext [max]flux-kontext-max8

Kontext'in en yüksek kaliteli varyantı (ayrı model): yönergeli düzenleme, 2 referansa kadar.

Tasks: i2i · Typical credits: 8

FieldNameTypeValuesDefault
oranEn-boy oranıenum21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:211:1
Nano Banana Pronano-banana-pro3

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

FieldNameTypeValuesDefault
oranEn-boy oranıenum1: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:11:1
cozunurlukÇözünürlükenum1K, 2K, 4K1K
batchHızboolean—true
Nano Banana 2nano-banana-22

Google Gemini 3.1 Flash Image (Nano Banana 2): hızlı, 1K/2K/4K, çoklu referans.

Tasks: t2i, i2i · Typical credits: 2

FieldNameTypeValuesDefault
oranEn-boy oranıenum1: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:11:1
cozunurlukÇözünürlükenum1K, 2K, 4K, 0.5K1K
batchHızboolean—true
Nano Banana 2 Litenano-banana-2-lite1

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

FieldNameTypeValuesDefault
oranEn-boy oranıenum1: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:11:1
cozunurlukÇözünürlükenum1K1K
batchHızboolean—true

Image generation

Text to image. With model: "otomatik" you must send kategori: "gorsel"; settings follow the model's settings (oran, adet, cozunurluk, parametreler).

POST/api/v1/isleruret

Request

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.

POST/api/v1/isleruret

Request

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.

POST/api/v1/isleruret

Request

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.

POST/api/v1/isleruret

Request

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.

GET/api/v1/isler/IS_IDoku

Request

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 comparison

File 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.

POST/api/v1/dosyalaruret

Request

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
}
POST/api/v1/dosyalaruret

Request

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.

POST/api/v1/tahminoku

Request

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": []
}
GET/api/v1/bakiyeoku

Request

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)."
  }
}
CodeHTTPMeaning
kimlik_gerekli401Authentication required: send an Authorization: Bearer <key> header.
kimlik_gecersiz401The key or access token is invalid, expired or revoked.
kapsam_yetersiz403The key's scope is insufficient for this operation (required: uret).
api_kapali503The API is currently disabled.
hesap_kapali403The account is not active, awaiting approval or its e-mail is not verified.
hiz_siniri429Per-minute request limit exceeded. Wait for the Retry-After duration.
eszamanli_sinir429Concurrent job limit for this key reached. Retry when one finishes.
aylik_sinir402This key's monthly credit limit has been reached.
kredi_yetersiz402Insufficient credit balance.
gunluk_sinir402Daily credit limit reached.
istek_gecersiz400The request body is invalid.
idempotency_gerekli400The Idempotency-Key header is required (8–128 characters).
idempotency_cakisma409This Idempotency-Key was already used with a different request body.
model_yok404Model not found or not available to your account.
dosya_yok404File not found.
is_yok404Job not found.
dosya_turu415Unsupported or corrupt file (image, video or audio).
dosya_boyutu413The file exceeds the size limit.
url_gecersiz400The URL could not be fetched: it must be a public https address (private network addresses are blocked).
baglanti_onay400Social media links require hak_onayi: true ("I have the right to use this video.").
baglanti_erisim403Adding videos from social links is not enabled for your account.
baglanti_limit429Your daily limit for adding videos from links is used up; try again tomorrow.
baglanti_hata422The video could not be added from the link.
baglanti_suruyor202The video is still being processed; retry with the same link shortly.
uyumsuz400The selected model cannot be used with this request (task, inputs or settings).
icerik_onayi_gerekli403Requests 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_bilinmiyor402The price of this request cannot be calculated right now; choose another model or setting.
uretilemiyor422The job could not be created.
akis_yok404Flow not found.
dugum_yok404Node not found.
baglanti_yok404Connection not found.
baglanti_kurulamadi400The connection could not be made.
etiket_yok400A tag in the prompt cannot be used.
akis_sorunu400The flow has problems to fix.
akis_calisiyor409This flow is already running.
akis_cakisma409The flow changed elsewhere; try again.
sunucu_hatasi500An 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_siniri with a Retry-After header.
  • 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/mcp

Streamable 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.

Add to Claude in one click

This link opens Claude's add connector dialog. If it does not open, follow the steps below.

Add manually

  1. 1In Claude open Customize → Connectors, then click + Add → Add custom connector.
  2. 2Enter Krixy as the name, paste the address below into MCP server URL and click Add.
  3. 3Click Connect next to the connector.
  4. 4On the Krixy page that opens, sign in and click Allow.

MCP server address

https://krixy.ai/mcp

Claude official docs

Claude Code

You need a Krixy account first; you will sign in with it while connecting.

  1. 1

    Type this in Claude Code:

    Add the Krixy MCP server: https://krixy.ai/mcp
  2. 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?
  1. 1Run the command below in your terminal (--scope user makes it available in all your projects).
  2. 2In Claude Code type /mcp, select krixy and choose Authenticate (or run the sign-in command in your terminal).
  3. 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/mcp

Sign-in command

claude mcp login krixy
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

claude mcp add --transport http --scope user krixy https://krixy.ai/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
Create API key

Claude Code official docs

ChatGPT

You need a Krixy account first; you will sign in with it while connecting.

Steps

  1. 1In ChatGPT (web) turn on Developer mode under Settings → Apps / Connectors → Advanced.
  2. 2Open chatgpt.com/plugins, click the + button and Add custom MCP server.
  3. 3Enter Krixy as the name; under Connection paste the address below into Server URL.
  4. 4Choose OAuth for authentication, confirm I understand and want to continue and click Create as a plugin.
  5. 5Install the plugin; on the Krixy page sign in and click Allow.

MCP server address

https://krixy.ai/mcp

ChatGPT official docs

Cursor

You need a Krixy account first; you will sign in with it while connecting.

Add manually

  1. 1Click Add to Cursor; Cursor opens and asks you to confirm the install.
  2. 2If the button does not work, add the snippet below to ~/.cursor/mcp.json (or .cursor/mcp.json for this project only).
  3. 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/mcp

Configuration (~/.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}"
      }
    }
  }
}
Create API key

Cursor official docs

VS Code

You need a Krixy account first; you will sign in with it while connecting.

Add manually

  1. 1Click Add to VS Code; VS Code opens, confirm with Install.
  2. 2Or in the Command Palette (Ctrl+Shift+P) choose MCP: Add Server → HTTP, paste the address below and name it krixy.
  3. 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/mcp

Configuration (.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}"
      }
    }
  }
}
Create API key

VS Code official docs

Codex

You need a Krixy account first; you will sign in with it while connecting.

Steps

  1. 1Run the add command in your terminal (or add the snippet to ~/.codex/config.toml).
  2. 2Run the sign-in command; on the Krixy page that opens in your browser, sign in and click Allow.
  3. 3Check that krixy is listed with codex mcp list.

MCP server address

https://krixy.ai/mcp

Command

codex mcp add krixy --url https://krixy.ai/mcp

Sign-in command

codex mcp login krixy

Configuration (~/.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"
Create API key

Codex official docs

Gemini CLI

You need a Krixy account first; you will sign in with it while connecting.

Steps

  1. 1Run the add command in your terminal (or add the snippet to ~/.gemini/settings.json).
  2. 2Open Gemini CLI and type the sign-in command.
  3. 3On the Krixy page that opens in your browser, sign in and click Allow.

MCP server address

https://krixy.ai/mcp

Command

gemini mcp add --transport http --scope user krixy https://krixy.ai/mcp

Sign-in command

/mcp auth krixy

Configuration (~/.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/mcp
Create API key

Gemini CLI official docs

Release 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.
Developer API and MCP | Krixy