본문으로 건너뛰기

API 문서 · 안정성

재시도 권장 사항

어떤 오류를 재시도할지, 어떻게 백오프할지.

상황재시도 여부방법
네트워크 타임아웃, 연결 끊김예같은 Idempotency-Key로 재시도
429 rate_limited예Retry-After만큼 기다린 뒤 재시도
500 internal_error예지수 백오프, 같은 멱등 키 사용
422 asset_not_ready예에셋이 available이 될 때까지 대기
400 / 401 / 403 / 404 / 409아니요요청을 수정한 뒤 다시 전송
402 한도 부족아니요한도를 충전하거나 Key 한도 또는 max_budget을 조정한 뒤 다시 전송
작업 failed실패 코드에 따라 다름작업 실패 코드의 권장 조치 참고. 다시 제출할 때는 새 멱등 키 사용

권장 백오프: 처음 1초, 이후 매번 2배씩 늘리고 0–500밀리초의 무작위 지터를 더하며 최대 5회까지 시도합니다. 플랫폼이 내부적으로 채널 단위 재시도와 전환을 이미 수행하므로 같은 작업을 중복 제출할 필요가 없습니다.

Node.js
// 서비스 측 고유 ID를 멱등 키로 사용: 타임아웃 후 재시도해도 작업이 중복 생성되지 않음
async function submit(order) {
  const key = `order-${order.id}-v${order.revision}`;
  for (let attempt = 0; attempt < 5; attempt++) {
    try {
      const res = await fetch("https://cn-api.aitoken.tools/v1/videos/generations", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.AITOKEN_API_KEY}`,
          "Idempotency-Key": key,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(order.payload),
      });
      if (res.status < 500 && res.status !== 429) return res.json();
    } catch {
      // 네트워크 오류: 같은 key로 계속 재시도
    }
    await new Promise((r) => setTimeout(r, 2 ** attempt * 1000 + Math.random() * 500));
  }
  throw new Error("submit failed");
}