/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 쓰기 에러는
500 INTERNAL_ERROR(재시도 가능)입니다.