Przykłady curl

Gotowe do skopiowania wywołania curl dla każdego endpointu API integracji wtyczek — happy path i typowe błędy.

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

/me

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

Prześlij zadanie

curl -X POST https://app.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 '{
    "job_type": "packshot",
    "provider": "gemini",
    "model": "nano-banana",
    "unit_cost": 1,
    "external_metadata": { "sku": "SKU-001" }
  }'

Replay zwraca oryginalne zadanie:

# Ten sam klucz + to samo body → 200 z tym samym id
# Ten sam klucz + inne body → 409 idempotency_conflict

Prześlij batch

curl -X POST https://app.qamera.ai/api/v1/plugin/jobs/batch \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy" \
  -H "Content-Type: application/json" \
  -d '{
    "jobs": [
      { "job_type": "packshot", "provider": "gemini", "model": "nano-banana", "unit_cost": 1, "external_metadata": { "sku": "A" } },
      { "job_type": "packshot", "provider": "gemini", "model": "nano-banana", "unit_cost": 1, "external_metadata": { "sku": "B" } }
    ]
  }'

Sprawdź zadanie

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

Lista zadań (ostatnie 25 ukończonych)

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

Odśwież output URL

curl -X POST https://app.qamera.ai/api/v1/plugin/jobs/job_01h82k.../refresh-url \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Anuluj oczekujące zadanie

curl -X DELETE https://app.qamera.ai/api/v1/plugin/jobs/job_01h82k... \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Wybij asset upload URL

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

Następnie wyślij bajty:

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

Lista presetów

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

Obróć sekret HMAC

curl -X POST https://app.qamera.ai/api/v1/plugin/installations/inst_…/rotate-hmac \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Response zawiera webhook_hmac_secret — zapisz go i odrzuć stary po 48h.

Powtórz delivery webhook

curl -X POST https://app.qamera.ai/api/v1/plugin/webhooks/del_…/replay \
  -H "X-Api-Key: mk_live_xxxxxxxx.yyyyyyyy"

Typowe błędy

HTTPcodeKiedy
401unauthorizedBrakujący/błędny/odwołany klucz
403forbiddenKlucz nie ma wymaganego scope
409idempotency_conflictTen sam Idempotency-Key, inne body
409job_not_completedrefresh-url wywołane przed ukończeniem
409job_not_cancelableCancel po ukończeniu
422quota_exceededKonto bez kredytów
429rate_limit_exceededBudżet na klucz wyczerpany; honoruj Retry-After
503internal_error (z 503)Beta gate zamknięty dla konta