범위 및 오류
최소 권한을 부여하고 공개 API의 안정적인 오류 코드를 모두 처리합니다.
최소 권한을 부여하고 공개 API의 안정적인 오류 코드를 모두 처리합니다.
모든 공개 API 작업에는 명시적인 범위 하나가 필요합니다. 유효한 자격 증명에 해당 범위가 없으면 403 insufficient_scope를 반환하며 권한을 자동으로 넓히지 않습니다.
범위 레퍼런스#
| 범위 | 허용 작업 |
|---|---|
account:read | 인증된 계정, 요금제, 권한, 지갑 요약 읽기 |
tickets:read | 지원 티켓과 메시지 읽기 |
tickets:write | 티켓 수정, 팀원 배정, 내부 메모 또는 고객 답장 추가 |
team:read | 팀 멤버, 대기 중인 초대, 허용된 감사 이벤트 읽기 |
team:write | 초대 생성·취소 및 소유자가 아닌 팀 역할 관리 |
integrations:read | 승인된 GitHub App 설치와 저장소 확인 |
integrations:write | 연동 변경 준비 및 초안 풀 리퀘스트 생성 |
sites:read | 사이트 목록 및 상세 읽기 |
sites:write | 사이트 생성, 수정, 게시, 게시 취소, 삭제 |
agents:read | 에이전트 설정 읽기 |
agents:write | 에이전트 동작, 언어, 음성, 임베드 설정 수정 |
knowledge:read | 지식 소스 및 FAQ 목록 읽기 |
knowledge:write | 지식 소스와 FAQ 생성·수정·삭제 |
conversations:read | 대화 목록 및 메시지 읽기 |
conversations:write | 대화 넘겨받기: 비즈니스로서 방문자에게 답장하고, 해당 대화에서 에이전트를 일시 중지했다가 다시 넘기기 |
leads:read | 수집된 리드 목록 읽기 |
leads:write | 리드 생성·수정·자격 판정 및 영업 기회 파이프라인 수락 |
pipeline:read | 단계, 계정, 영업 기회, 활동, 성과 귀속, CRM 동기화 상태 읽기 |
pipeline:write | 단계 설정, 계정·영업 기회 생성/수정, CRM 결과 가져오기/재시도 |
analytics:read | 사이트 분석 이벤트 읽기 |
connectors:read | 시크릿 없이 커넥터 상태 읽기 |
connectors:write | 커넥터 생성, 수정, 활성화, 비활성화, 삭제 |
domains:read | 제거됨. 호환성을 위해서만 유지되며, 커스텀 도메인을 제공하지 않으므로 모든 /domains 경로는 409를 반환 |
domains:write | 제거됨. 호환성을 위해서만 유지되며, 모든 /domains 경로는 409를 반환 |
broadcasts:read | 브로드캐스트 및 전달 상태 읽기 |
broadcasts:write | 초안 생성 및 브로드캐스트 전송 대기열 등록 |
notifications:read | 소유자 알림 목록 읽기 |
notifications:write | 알림을 읽음 또는 읽지 않음으로 표시 |
monetization:read | 수익화 상품 목록 읽기 |
monetization:write | 상품 생성, 수정, 활성화, 비활성화, 삭제 |
usage:read | 측정된 사용량 이벤트 읽기 |
webhooks:read | 웹훅 엔드포인트와 전달 상태 읽기 |
webhooks:write | 웹훅 엔드포인트 생성 및 삭제 |
보고 작업에는 읽기 범위를 사용하세요. 연동이 실제로 변경 작업을 수행할 때만 쓰기 범위를 추가합니다. 예를 들어 리드 내보내기는 일반적으로 sites:read와 leads:read만 필요하며 sites:write나 agents:write는 필요하지 않습니다.
범위 오류#
{
"error": {
"code": "insufficient_scope",
"message": "The API key does not grant the required scope.",
"details": { "required": ["sites:write"] },
"request_id": "6c0b2f2e-..."
}
}설정 → 개발자 → 수정에서 키에 누락된 범위를 추가하거나, 대체 키를 만들고 서버 시크릿을 업데이트하세요. 수정하면 키의 이름과 범위가 그 자리에서 바뀌며 만료일과 토큰은 그대로 유지됩니다. OAuth로 발급된 키는 수정할 수 없으므로, 부여된 권한을 바꾸려면 애플리케이션을 다시 연결하세요.
오류 응답 형식#
모든 API 오류는 같은 최상위 구조를 사용합니다.
type ApiError = {
error: {
code: string;
message: string;
details?: unknown;
request_id: string;
};
};영문 message가 아니라 error.code로 분기하세요. 메시지는 버전 변경 없이 개선될 수 있습니다. 작업 이름, 상태, 재시도 횟수와 함께 error.request_id 및 x-request-id 응답 헤더를 기록하되 Authorization 헤더나 요청 시크릿은 기록하지 마세요.
상태 및 코드 레퍼런스#
| HTTP | 안정적인 코드 | 의미 | 일반적인 처리 |
|---|---|---|---|
400 | invalid_request | 필드 검증 실패 또는 지원하지 않는 값 | details의 필드를 수정하고 같은 입력은 재시도하지 않음 |
400 | invalid_json | 본문이 JSON 객체가 아니거나 잘못된 JSON | 유효한 JSON 객체 하나를 전송 |
401 | authentication_required | Bearer 헤더 누락 | 서버 측 자격 증명 추가 |
401 | invalid_api_key | 키가 잘못되었거나 만료·폐기되었거나 소유자가 없음 | 키 교체 또는 회전 |
403 | subscription_required | 소유자에게 활성 유료 요금제가 없음 | 구독 복구 후 재시도 |
403 | insufficient_scope | 작업에 필요한 범위가 없음 | 최소 권한 대체 자격 증명 생성 |
404 | not_found | 엔드포인트 또는 소유 리소스를 찾을 수 없음 | 경로와 테넌트 소유 ID 확인 |
409 | conflict | 현재 리소스 상태가 작업을 막음 | 현재 상태를 읽은 후 재시도 |
413 | payload_too_large | JSON 본문이 요청 상한 256 KB를 초과 | 더 작은 본문을 보내고 큰 콘텐츠는 여러 요청으로 분할 |
415 | invalid_request | 변경 본문이 application/json이 아님 | Content-Type: application/json 전송 |
429 | rate_limit_exceeded | 키의 1분 요금제 버킷 소진 | Retry-After만큼 기다리고 지터 적용 |
500 | internal_error | 요청을 완료할 수 없음 | 안전하거나 멱등한 작업을 재시도하고 요청 ID 보고 |
503 | outcome_unknown | 변경이 완료되었을 수 있지만 결과를 기록하지 못함. details.retryable은 false | 재시도하지 않음. 리소스를 읽어 변경 여부를 확인하며, 같은 멱등성 키는 계속 이 결과를 반환 |
자격 증명 소유자의 계정 밖에 있는 리소스는 다른 테넌트의 ID 존재 여부를 숨기기 위해 404를 반환할 수 있습니다.
검증 상세 정보#
필드 검증은 자신의 폼 컨트롤 옆에 표시할 수 있는 경로를 반환합니다.
{
"error": {
"code": "invalid_request",
"message": "Request validation failed.",
"details": [
{ "path": "content.headline", "message": "String must contain at least 1 character(s)" }
],
"request_id": "6c0b2f2e-..."
}
}변경 요청 본문은 JSON 객체여야 합니다. 배열, 빈 본문, 폼 데이터, 텍스트 콘텐츠 유형으로 보낸 JSON은 거부됩니다.
재시도 판단#
429는Retry-After초 뒤에 재시도합니다.500은 안전한 읽기 또는 같은Idempotency-Key로 보호된 쓰기만 재시도합니다.- 처리 중인 멱등성
409는Retry-After: 2헤더 뒤에 재시도합니다. 503 outcome_unknown은 무작정 재시도하지 않습니다. 먼저 리소스를 확인하고, 변경이 일어나지 않았음을 확인한 뒤에만 새 멱등성 키를 사용합니다.400,401,403,404,413또는 상태 충돌은 원인이 바뀌기 전까지 재시도하지 않습니다.