Skip to main content
업데이트: 2026-09-18

비동기 이미지 생성

이미지 모델은 한 번 생성하는 데 보통 20~120초가 걸립니다. 동기 인터페이스는 클라이언트가 결과를 기다리는 동안 HTTP 연결을 계속 유지해야 하며, 게이트웨이/프록시의 읽기 타임아웃에 걸리기 쉽고, 반환되는 base64도 용량이 큽니다. 비동기 모드는 이 과정을 두 번의 호출로 분리합니다:
  1. 제출: 요청이 즉시 202와 작업 ID를 반환합니다(1초 미만).
  2. 폴링: 작업 ID로 GET /v1/tasks/{id}를 조회하면, 완료 후 result에 이미지의 https URL이 담깁니다(media.crazyrouter.com에 영구 보관), base64는 반환되지 않습니다.
모델명, 요청 본문, 과금은 동기 방식과 완전히 동일합니다. 비동기는 단지 “결과를 언제 받는지”만 바꿉니다. 동일한 API Key로 일부 요청은 동기, 일부는 비동기로 사용할 수 있습니다. 작업이 실패하면 과금되지 않습니다.

지원 모델

방식 1: Gemini 경로 별칭 (Gemini 클라이언트 권장)

요청 본문, 요청 헤더, 쿼리 파라미터의 어떤 바이트도 변경할 필요가 없으며, 동작 접미사만 :generateContent에서 :asyncGenerateContent로 바꾸면 됩니다.
cURL
202 반환:
반환되는 model은 파싱된 실제 하위 모델명입니다(예: gemini-3.1-flash-image-preview), 소비 로그와 일치합니다; 이는 nano-banana-2로 제출하는 것에 영향을 주지 않습니다. 참조 이미지 편집은 동기 방식과 작성법이 동일합니다: parts에 inlineData(base64) 또는 fileData(URL)를 넣으면 됩니다.
:asyncGenerateContent는 이미지 출력 모델만 지원합니다; 텍스트 모델로 호출하면 400 async mode is only available for image models가 반환됩니다. 스트리밍 동작 :streamGenerateContent는 비동기를 지원하지 않습니다.

방식 2: OpenAI 이미지 엔드포인트에 Prefer 헤더 추가

기존 /v1/images/generations 또는 /v1/images/edits 요청에 HTTP 헤더 Prefer: respond-async를 추가하며, 나머지는 그대로 유지합니다. 요청 본문 필드 "async": true(JSON) 또는 폼 필드 async=true(multipart)로 바꾸어도 동일한 효과가 있습니다.
응답 헤더에 Preference-Applied: respond-async가 포함되며, 본문은 방식 1과 동일합니다(202 + 작업 ID).

작업 조회

본인 계정이 제출한 작업만 조회할 수 있으며, 다른 계정의 ID는 모두 404가 반환됩니다. 2~3초 간격으로 폴링하는 것을 권장하며, 10분이 지나도 완료되지 않으면 실패로 간주할 수 있습니다.

상태

완료 시 응답 (Gemini 계열)

result는 네이티브 Gemini GenerateContentResponse이며, inlineData만 이미지 URL을 가리키는 fileData로 바뀌어 있습니다:

완료 시 응답 (OpenAI 계열)

result는 동기 /v1/images/*의 반환 형태와 동일하며, 이미지는 data[].url에 담깁니다:
정말로 base64가 필요한 경우, 조회 시 ?inline=true를 추가하면 서버가 보관된 이미지를 다시 읽어 inlineData / b64_json으로 복원해 줍니다(권장하지 않으며, 대용량 이미지는 느립니다).

실패 시 응답

retryable: true는 새 작업을 다시 제출할 수 있음을 의미합니다; 시스템은 자동으로 재시도하지 않습니다.

멱등 제출

네트워크 재시도로 동일한 작업이 중복 제출될 수 있습니다. 제출 요청에 Idempotency-Key: <임의의 문자열> 헤더를 추가하면, 동일 계정·동일 키에 대해 동일한 작업 ID가 반환됩니다(두 번째 호출은 202가 아니라 200을 반환), 중복 생성도 중복 과금도 발생하지 않습니다.

동기 방식과의 차이 비교