Przykłady curl

Ściąga z gotowymi wywołaniami curl dla każdego endpointu API integracji wtyczek.

To jest ściąga — samo wywołanie, bez omówienia. Przewodniki krok po kroku, z odpowiedziami i obsługą błędów, znajdziesz w głównych procesach.

Zamień mk_live_… na klucz API Twojej instalacji. Bazowy adres to https://qamera.ai.

/me

curl https://qamera.ai/api/v1/plugin/me \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Wgraj plik

curl -X POST https://qamera.ai/api/v1/plugin/assets/upload \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Content-Type: application/json" \
  -d '{ "mode": "presigned", "filename": "shoe.jpg", "content_type": "image/jpeg", "size_bytes": 482310 }'

curl -X PUT "$PRESIGNED_URL" --upload-file shoe.jpg \
  -H "Content-Type: image/jpeg"

Zarejestruj zdjęcie źródłowe

curl -X POST https://qamera.ai/api/v1/plugin/images \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Content-Type: application/json" \
  -d '{
    "images": [
      { "external_ref": "sklep1:zdjecie-101", "product_ref": "SKU-001", "product_metadata": { "display_name": "Buty model X" }, "asset_id": "00000000-0000-0000-0000-000000000010" }
    ]
  }'

Zarejestruj packshot (zaakceptowany od razu)

curl -X POST https://qamera.ai/api/v1/plugin/packshots \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Content-Type: application/json" \
  -d '{
    "packshots": [
      { "external_ref": "sklep1:packshot-42", "product_ref": "SKU-001", "product_metadata": { "display_name": "Buty model X" }, "asset_id": "00000000-0000-0000-0000-000000000010" }
    ]
  }'

Prześlij sesję (jeden produkt × 4 zdjęcia)

curl -X POST https://qamera.ai/api/v1/plugin/jobs \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Idempotency-Key: order_12345-submit" \
  -H "Content-Type: application/json" \
  -d '{
    "session_config": {
      "model_id": "00000000-0000-0000-0000-000000000aaa",
      "scenery_id": "00000000-0000-0000-0000-000000000bbb",
      "preset_id": "preset_minimal",
      "aspect_ratio": "4:5",
      "suggestions": "naturalne światło"
    },
    "subjects": [
      {
        "product_label": "Buty model X",
        "product_ref": "SKU-001",
        "images_count": 4,
        "ai_model": "google/gemini-3-pro-image-preview"
      }
    ],
    "external_metadata": { "sku": "SKU-001" }
  }'

Bez packshot_asset_id sesja używa najnowszego zaakceptowanego packshota produktu. Produkt bez zaakceptowanego packshota → 422 packshot_not_approved (samouczek).

Zamów propozycje packshota

curl -X POST https://qamera.ai/api/v1/plugin/jobs \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Idempotency-Key: packshoty-SKU-001" \
  -H "Content-Type: application/json" \
  -d '{
    "job_type": "packshot",
    "session_config": { "aspect_ratio": "1:1" },
    "subjects": [
      {
        "packshot_asset_id": "00000000-0000-0000-0000-000000000010",
        "product_label": "Buty model X",
        "product_ref": "SKU-001",
        "images_count": 3,
        "ai_model": "byteplus/seedream-4.5",
        "auto_register_packshot": true,
        "packshot_external_ref": "sklep1:packshot-kandydat"
      }
    ]
  }'

Prześlij batch

curl -X POST https://qamera.ai/api/v1/plugin/jobs/batch \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Content-Type: application/json" \
  -d '{
    "batches": [
      {
        "session_config": { "aspect_ratio": "4:5" },
        "subjects": [
          { "product_label": "A", "product_ref": "SKU-A", "images_count": 4, "ai_model": "google/gemini-3-pro-image-preview" }
        ]
      },
      {
        "session_config": { "aspect_ratio": "9:16" },
        "subjects": [
          { "product_label": "B", "product_ref": "SKU-B", "images_count": 4, "ai_model": "google/gemini-3-pro-image-preview" }
        ]
      }
    ]
  }'

Limity: 100 sesji i 5000 zdjęć łącznie. Odpowiedź: HTTP 207 z wynikiem per sesja (samouczek).

Sprawdź zadanie

curl https://qamera.ai/api/v1/plugin/jobs/00000000-0000-0000-0000-0000000000a1 \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Lista zadań (ostatnie 25 ukończonych)

curl "https://qamera.ai/api/v1/plugin/jobs?status=completed&limit=25" \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Odśwież adresy pobrania

curl -X POST https://qamera.ai/api/v1/plugin/jobs/00000000-0000-0000-0000-0000000000a1/refresh-url \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Anuluj oczekujące zadanie

curl -X DELETE https://qamera.ai/api/v1/plugin/jobs/00000000-0000-0000-0000-0000000000a1 \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Zaakceptuj lub odrzuć ukończone zadanie

curl -X POST https://qamera.ai/api/v1/plugin/jobs/00000000-0000-0000-0000-0000000000a1/accept \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

curl -X POST https://qamera.ai/api/v1/plugin/jobs/00000000-0000-0000-0000-0000000000a1/reject \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Uwaga: dla zadania packshot akceptacja zatwierdza packshot produktu; dla zadania photo_shoot to tylko informacja zwrotna (szczegóły).

Pobierz pełną sesję (zamówienie)

curl https://qamera.ai/api/v1/plugin/orders/00000000-0000-0000-0000-000000000099 \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Sklonuj sesję

# 1:1 — te same produkty i liczby zdjęć
curl -X POST https://qamera.ai/api/v1/plugin/orders/00000000-0000-0000-0000-000000000099/clone \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Idempotency-Key: clone-99-runda2" \
  -H "Content-Type: application/json" \
  -d '{}'

# inna liczba zdjęć per produkt
curl -X POST https://qamera.ai/api/v1/plugin/orders/00000000-0000-0000-0000-000000000099/clone \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Idempotency-Key: clone-99-runda3" \
  -H "Content-Type: application/json" \
  -d '{ "subjects": [ { "product_ref": "SKU-001", "images_count": 8 } ] }'

Idempotency-Key jest przy klonowaniu obowiązkowy (samouczek).

Lista stylów (presetów)

curl https://qamera.ai/api/v1/plugin/presets \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Dane katalogowe

curl https://qamera.ai/api/v1/plugin/models -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"
curl https://qamera.ai/api/v1/plugin/sceneries -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"
curl https://qamera.ai/api/v1/plugin/ai-models -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"
curl https://qamera.ai/api/v1/plugin/aspect-ratios -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"
curl https://qamera.ai/api/v1/plugin/pricing -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Wymień sekret HMAC

curl -X POST https://qamera.ai/api/v1/plugin/installations/00000000-0000-0000-0000-0000000000f1/rotate-hmac \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Odpowiedź zawiera nowy webhook_hmac_secret (pokazany tylko raz); stary działa jeszcze 48 godzin.

Wyślij ponownie powiadomienie webhook

curl -X POST https://qamera.ai/api/v1/plugin/webhooks/00000000-0000-0000-0000-0000000000d1/replay \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Typowe błędy

HTTPKodKiedy
401unauthorizedBrakujący, błędny lub odwołany klucz
403forbiddenKlucz nie ma wymaganego uprawnienia
409idempotency_conflictTen sam Idempotency-Key, inne body
409job_not_completedrefresh-url/ocena przed ukończeniem zadania
409job_not_cancelableAnulowanie po ukończeniu
422packshot_not_approvedProdukt bez zaakceptowanego packshota
402quota_exceededKonto bez kredytów
429rate_limit_exceededLimit zapytań wyczerpany; honoruj Retry-After
503Dostęp beta nie został jeszcze włączony dla konta

Pełna lista: lista błędów.