cURL · Hayalet manken API'si
Hayalet manken API'si cURL ile
Tek cümlede
PHOTTA_API_KEY değişkenini dışa aktarın, belgelenen JSON gövdesiyle https://api.photta.app/api/v1/api/v1/ghost-mannequin adresine POST isteği atın, üretim ID'sini yakalayın, ardından data.status değeri completed olana kadar her 3 saniyede bir /api/v1/ghost-mannequin/{id} üzerinde bir GET döngüsü çalıştırın. Çıktı URL'sini ayıklamak için jq ile birleştirin.
- Tipik süre: 1.5–4 min
- Credits: 2K'da 4 credits · 4K'da 5 credits
- İşleme: asenkron, polling
- Sınırlar: 600 istek/dk
- Kimlik doğrulama: Bearer anahtarı
Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')
# $ID is data.id from the POST response. Poll every 3 seconds until status is "completed" or "failed".
for i in $(seq 1 120); do
RESULT=$(curl -s "https://api.photta.app/api/v1/ghost-mannequin/$ID" -H "Authorization: Bearer $PHOTTA_API_KEY")
STATUS=$(echo "$RESULT" | jq -r '.data.status')
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && echo "generation failed" && exit 1
sleep 3
done
echo "$RESULT" | jq -r '.data.output_url'const res = await fetch("https://api.photta.app/api/v1/ghost-mannequin", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}),
});
const { data } = await res.json(); // data.id, data.status
async function waitFor(id) {
for (let attempt = 0; attempt < 120; attempt++) {
const res = await fetch(`https://api.photta.app/api/v1/ghost-mannequin/${id}`, { headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}` } });
const { data } = await res.json();
if (data.status === "completed") return data.output_url;
if (data.status === "failed") throw new Error(data.error_message ?? "generation failed");
await new Promise((r) => setTimeout(r, 3000));
}
throw new Error("timed out after 6 minutes");
}import os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front",
"angle": "side",
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, cream interior lining",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]
import time
def wait_for(job_id):
for _ in range(120):
res = requests.get(f"https://api.photta.app/api/v1/ghost-mannequin/{job_id}", headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"})
data = res.json()["data"]
if data["status"] == "completed":
return data["output_url"]
if data["status"] == "failed":
raise RuntimeError(data.get("error_message", "generation failed"))
time.sleep(3)
raise TimeoutError("timed out after 6 minutes")Genel bakış
Genel bakış
- Endpoint
- POST /api/v1/ghost-mannequin
- Kimlik doğrulama
- Bearer API anahtarı
- İşleme
- Asenkron — durum endpoint'ini sorgulayın (poll)
- Tipik süre
- 1.5–4 min
- Credits
- 2K'da 4 credits · 4K'da 5 credits
- En-boy oranları
- 3:4 · 1:1 · 4:3 · 9:16 · 16:9
- Girdi sınırları
- Görsel başına en fazla 10 MB; JPEG, PNG, WebP
- Idempotent
- Hayır
Nasıl çalışır
curl ve jq haricinde sıfır bağımlılıkla beş kabuk adımı.
Adım 1
Kaydolun ve bir anahtar oluşturun
ai.photta.app adresine gidin, Geliştiriciler sekmesini açın, API anahtarı oluştur'a tıklayın. Canlı anahtarlar `photta_live_` ile başlar.
Adım 2
Anahtarı dışa aktarın
Sonraki tüm curl çağrılarının bunu otomatik olarak alması için kabuk profilinize veya bir `.envrc` dosyasına `export PHOTTA_API_KEY="photta_live_xxx"` satırını ekleyin.
curl --version # macOS, Linux, WSL and Windows 10+ ship it export PHOTTA_API_KEY="photta_live_xxxxx"Adım 3
Temel URL'yi sabitleyin
`export PHOTTA_BASE_URL="https://api.photta.app/api/v1"` komutu curl komutlarını kısa tutar.
export PHOTTA_BASE_URL="https://api.photta.app/api/v1" export AUTH_HEADER="Authorization: Bearer $PHOTTA_API_KEY"Adım 4
Gönder ve yokla
Bir ID almak için `$PHOTTA_BASE_URL/api/v1/ghost-mannequin` adresine POST isteği atın, ardından her 3 saniyede bir `curl $PHOTTA_BASE_URL/api/v1/ghost-mannequin/{id}` döngüsü çalıştırın. `.data.status` değerini temiz bir şekilde ayıklamak için yanıtı jq'ya aktarın.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin \ -H "Authorization: Bearer $PHOTTA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "product_image": "https://cdn.yourstore.com/products/jacket-front.jpg", "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg", "image_side": "front", "angle": "side", "style": "3d", "background_color": "white", "resolution": "2K", "aspect_ratio": "3:4", "user_instruction": "closed front, cream interior lining", "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67" }') ID=$(echo "$RESPONSE" | jq -r '.data.id') # $ID is data.id from the POST response. Poll every 3 seconds until status is "completed" or "failed". for i in $(seq 1 120); do RESULT=$(curl -s "https://api.photta.app/api/v1/ghost-mannequin/$ID" -H "Authorization: Bearer $PHOTTA_API_KEY") STATUS=$(echo "$RESULT" | jq -r '.data.status') [ "$STATUS" = "completed" ] && break [ "$STATUS" = "failed" ] && echo "generation failed" && exit 1 sleep 3 done echo "$RESULT" | jq -r '.data.output_url'Adım 5
Sonucu kalıcı hale getir
İş tamamlandığında, `.data.output_url` değerini jq ile çekin ve baytları yerel depolama alanına aktarmak için `curl -o` kullanın — bir sonraki pipeline adımınız için hazır.
Hatalar
- 400
invalid_request_error - The request is malformed or contains invalid parameters.
- 401
authentication_error - The API key is missing, invalid, or expired.
- 402
insufficient_credits_error - Your account does not have enough credits.
- 404
not_found_error - The requested resource does not exist.
- 409
conflict_error - The request conflicts with current state — e.g. your concurrent-batch cap is reached.
- 429
rate_limit_error - Too many requests. Slow down and retry.Retry-After: 30
- 500
api_error - An internal server error occurred. Retry later.
case "$STATUS_CODE" in
402) echo "insufficient_credits_error — top up before retrying" ;;
429) echo "rate_limit_error — wait the Retry-After seconds (30 by default)" ;;
4??) echo "$BODY" | jq '.error.type, .error.message' ;;
5??) echo "api_error — retry with backoff" ;;
esacSınırlar
- API anahtarı başına dakikada 600 istek (Sabit pencere; limit her planda aynıdır)
- 429 yanıtı Retry-After: 30 saniye içerir
- Görsel başına en fazla 10 MB
- Formatlar: JPEG, PNG, WebP
- Plan başına eşzamanlı toplu işlem: Free 1 · Hobby 2 · Seller 3 · Brand 4 · Studio 6
- Yalnızca polling — API webhook göndermez.
cURL neden hâlâ bir API'yi doğrulamanın en hızlı yoludur
- Sıfır kurulum — cURL tüm büyük işletim sistemleriyle birlikte gelir
- Komut dosyalı pipeline'lar için jq ile mükemmel uyum sağlar (CI, cron, kabuk kancaları)
- Bir endpoint'i koda bağlamadan önce duman testine (smoke test) tabi tutmanın en hızlı yolu
- Bu sayfadaki her komut herhangi bir POSIX kabuğuna doğrudan yapıştırılabilir
Neleri yapmaz
- Yoklama döngüsü terminali bloke eder — paralel çalışanlar için Node veya Python'a geçin
- Yoklama (polling) tek tamamlanma sinyalidir; API webhook göndermez
- Windows Komut İstemi kullanıcıları WSL veya PowerShell'in curl.exe aracını çalıştırmalıdır
Geliştiricilerin sıkça sorduğu sorular
Photta için bir CLI aracı var mı?
Henüz yok — ancak cURL ve on beş satırlık bir bash sarmalayıcısı (wrapper) işinizi büyük ölçüde görür. Dokümanlar cURL öncelikli örneklere odaklanır; çünkü her dil bir alt süreç (subprocess) çalıştırabilir ve kabuk, CI pipeline'larında ortak paydadır.
API'yi kullanmak için jq'ya ihtiyacım var mı?
Kesinlikle şart değil — ancak komut dosyalı pipeline'lar bununla çok daha kolaydır. jq, JSON yanıtını elle ayrıştırmanıza gerek kalmadan içinden `.data.id`, `.data.status` ve `.data.output_url` alanlarını çekmenizi sağlar. macOS'te `brew install jq` veya Debian/Ubuntu'da `apt install jq` ile kurabilirsiniz.
curl ile kimlik doğrulamasını nasıl yaparım?
Her isteğe `-H "Authorization: Bearer $PHOTTA_API_KEY"` ekleyin. Anahtarı bir ortam değişkeninde tutun, commit ettiğiniz bir betiğin içine asla doğrudan yazmayın. `curl --oauth2-bearer` da çalışır ancak açık başlık (header) biçimi dokümanlarda ve loglarda daha nettir.
curl tabanlı betikleri prodüksiyonda kullanabilir miyim?
Tek seferlik toplu doldurmalar (batch backfills) ve cron işleri için evet — binlerce ekip katalog güncellemelerini bu şekilde dağıtıyor. Uzun ömürlü bir uygulama için gerçek bir dil genellikle daha iyidir; çünkü düzgün hata yönetimi, yeniden denemeler ve gözlemlenebilirlik elde edersiniz. Bu sayfadaki curl örnekleri, Node veya Python'a geçtikten sonra bile geçerliliğini korur; istek yapısı aynıdır.
Bir bash döngüsüyle nasıl yoklama (poll) yapabilirim?
Döngü gövdesinde durum kontrolü olacak şekilde `for i in $(seq 1 120); do … ; sleep 3; done` kullanın. `.data.status` değeri `completed` veya `failed` olduğunda döngüden çıkın. Bu sayfadaki kod örneği, takılan bir işin betiği sonsuza kadar askıda tutmasını önleyen kesin bir üst sınır da dahil olmak üzere tam deseni gösterir.
curl'de hata yanıtlarını nasıl okurum?
JSON gövdesinin yanında HTTP durum kodunu da yakalamak için `curl -w "\n%{http_code}"` kullanın. Duruma göre dallara ayırın: Yetersiz credits için 402, rate limit için 429 (Retry-After değerini dikkate alın), geçici sunucu hataları için 5xx. Hata gövdesinde her zaman bir `error.code` ve `error.message` alanı bulunur.
İlgili sayfalar
Node.js
Node.js'te Hayalet manken API'si
Yerel fetch ile bir Node.js backend'inden Photta'nın hayalet manken API'si özelliğini çağırın. SDK gerekmez: anahtarınızı saklayın, işi gönderin, sonuç için poll edin.
OkuPython
Python'da Hayalet manken API'si
Photta'nın hayalet manken API'si özelliğini requests kütüphanesiyle Python'da çağırın. Otuz satırlık sarmalayıcı, httpx ile asenkron uyumlu, Django, FastAPI ve Celery içinde çalışır.
OkuYetenekler
Hayalet manken API'si içi boş manken ürün fotoğrafları için
Yapay zeka hayalet manken endpoint'i. Giysi fotoğrafından mankeni kaldırın ve iç detayları koruyun. 3D veya flat-lay, toplu işleme, 2K'da 4 kredi.
OkuGeliştir
Kataloğunuz için hayalet manken çıkarma işlemini otomatikleştirin
Gecelik katalog otomasyonu tarifi: dünün ürün güncellemelerini çekin, Photta'nın ghost-mannequin API'sine toplu olarak gönderin, ana toplu işlemi (parent batch) poll edin, veritabanınıza kaydedin.
OkuHızlı başlangıç
Beş dakikadan kısa sürede ilk Photta görseli.
Kayıt olun, bir API anahtarı oluşturun, ilk cURL çağrınızı çalıştırın, tamamlanana kadar yoklayın, sonucu kalıcı hale getirin. Beş adım, uçtan uca belgelenmiş.
OkuReferans
Photta API fiyatlandırması
Her bir Photta API endpoint'inin 2K ve 4K çözünürlükte kredi cinsinden maliyeti, ücretlendirme ile iadelerin nasıl çalıştığı ve hangi endpoint'lerin ücretsiz olduğu. Görsel başına doğrudan parasal fiyatlandırma yoktur.
Oku
Bu sayfadaki her veri şuradan alınmıştır: Photta API dokümantasyonu · kontrol edildi
API'yi beş dakikada deneyin
Bir Photta API key oluşturun, yukarıdaki cURL kod parçacığını yapıştırın; kahveniz demlenmeden önce model üzerindeki ilk görselinizi alın.
- 1.5–4 min
- 2K'da 4 credits · 4K'da 5 credits
- asenkron, polling
- 600 istek/dk
- Bearer anahtarı