메인 콘텐츠로 건너뛰기
/api/preview/*의 에러는 엔드포인트와 관계없이 하나의 JSON 형식을 사용합니다.
에러는 code로 처리하고, 모르는 코드는 HTTP 상태와 retryable 값으로 판단하세요. 프리뷰 기간에는 새 코드가 추가될 수 있습니다. JSON 본문이 없는 응답도 있습니다: 존재하지 않는 경로(404), 라우트가 지원하지 않는 메서드(405, 예: Instagram 규칙에 DELETE), 그리고 드물게 인증이나 속도 제한 처리가 예기치 않게 실패한 경우의 5xx입니다. 본문을 파싱할 수 없는 5xx는 재시도 가능한 것으로 취급하세요.

재시도

  • retryable: true: 잠시 기다린 뒤 같은 요청을 다시 보내세요. retryAfterSeconds(429에서는 Retry-After 헤더)가 있으면 그 값을 따르고, 없으면 1~2초부터 시작해 지터를 넣어 지수적으로 간격을 늘리세요. 재시도는 5회 정도로 제한하고, 짧은 간격으로 반복해서 보내지 말고, retryAfterSeconds가 0이어도 최소 1초는 기다리세요.
  • retryable: false: 같은 요청은 같은 이유로 다시 실패합니다. 아래 표에 따라 입력을 고치거나, 리소스를 다시 조회하거나, 대시보드에서 사람이 조치하도록 알리세요.
  • Idempotency-Key를 쓰는 생성 요청 (POST /api/preview/documents, POST /api/preview/instagram/rules, POST /api/preview/segments): 생성 요청이 직접 재시도 가능하다고 보고한 실패(예: 재시도 가능한 NOTION_FETCH_FAILED, INSTAGRAM_UNAVAILABLE)는 키를 해제하므로 같은 키와 본문으로 재시도하세요. 재시도할 수 없는 실패는 키에 저장되므로, 같은 키와 본문을 다시 보내면 같은 에러가 다시 반환됩니다. 요청을 고친 뒤에는 새 키로 보내세요(기존 키를 다른 본문으로 재사용하면 409 IDEMPOTENCY_KEY_CONFLICT입니다).
  • 500 INTERNAL_ERROR로 실패한 생성 요청은 최대 1분 정도 키를 계속 잡고 있을 수 있습니다. 같은 키와 본문으로 재시도하세요. 이전 시도가 아직 키를 잡고 있는 동안에는 409 IDEMPOTENCY_KEY_IN_PROGRESS가 반환되니, 시도 사이에 retryAfterSeconds(3초)만큼 기다리세요. 약 1분 안에 풀리며, 그 뒤의 재시도는 새 요청으로 실행됩니다. 2분이 지나도 풀리지 않으면 재시도를 멈추고 원인을 확인하세요.

속도 제한

계정이 보유한 키 개수와 무관하게, 모든 /api/preview/* 라우트에 대해 계정당 분당 60회 요청으로 제한됩니다. 제한을 넘으면 API는 다음 헤더와 함께 429 RATE_LIMITED를 반환합니다. 이 헤더들은 429에만 포함됩니다. 멱등 생성 요청에서는 이미 사용된 키의 재생(replay), 충돌, 처리 중 응답은 속도 제한 횟수에 포함되지 않습니다.

동시에 실행 중인 요청

계정은 보유한 키 개수와 무관하게 모든 /api/preview/* 라우트에서 동시에 실행 중인 요청을 최대 10개까지 가질 수 있습니다. 11번째 요청은 Retry-After: 1과 함께 429 TOO_MANY_CONCURRENT_REQUESTS로 거절되며, X-RateLimit-* 헤더는 없습니다. 아직 끝나지 않은 요청을 세므로, 분당 60회보다 한참 적게 보내도 적용될 수 있습니다. 요청을 한꺼번에 보내지 말고 하나씩, 또는 몇 개씩 나눠 보내세요. 거절된 요청은 아무것도 하지 않았으므로 그대로 재시도해도 안전하지만, Retry-After만큼 기다린 뒤에 보내세요. 거절된 요청도 분당 60회에 포함됩니다. 단, 멱등 생성 요청은 요청이 받아들여진 뒤에만 이 횟수를 사용합니다.

에러 코드

인증과 접근

모든 엔드포인트에서 반환될 수 있습니다.

속도 제한과 가용성

API는 502와 함께 BATCH_SCHEDULE_FAILED 또는 INSTAGRAM_UNAVAILABLE을 반환할 수도 있습니다 (Instagram 참고). 둘 다 재시도 가능합니다.

요청 형식

멱등

POST /api/preview/documents, POST /api/preview/instagram/rules, POST /api/preview/segments에는 Idempotency-Key 헤더가 필요합니다. POST /api/preview/segments/preview는 이 헤더를 받지 않습니다. 아무것도 저장하지 않으므로 반복 호출해도 항상 안전합니다.

문서

연락처

그룹

그룹 규칙은 POST /segments와 POST /segments/preview가 똑같이 검사합니다. 여기서 거부된 요청은 아무것도 만들거나 바꾸지 않았습니다. 규칙 형식은 그룹 조건에 있습니다.

이메일

Instagram

위 코드 중 어디에도 해당하지 않는 Instagram 쓰기 에러는 500 INTERNAL_ERROR(재시도 가능)입니다.