본문으로 건너뛰기
GEO Tracker

v1 · 엔드포인트 8개

API 문서

사이트 진단 결과와 브랜드의 AI 답변·검색 노출 데이터를 조회하는 API입니다. 진단·데이터 수집을 요청하고, AI 답변 모니터링에 사용할 질문을 조회·추가·삭제할 수 있습니다.

개요

API는 HTTPS로 호출합니다. 요청 본문과 응답은 JSON 형식을 사용합니다. API 기본 주소는 다음과 같습니다.

https://{host}/api/v1

{host}는 연동 시 안내하는 API 호스트입니다.

데이터는 워크스페이스별로 조회합니다. 요청 경로의 {workspaceId}에는 대상 워크스페이스의 ID를 지정합니다.

Note

외부 연동은 이 문서에 명시된 /api/v1 경로만 지원합니다.

API 시작하기

1. API 키 발급

팀 관리자 또는 워크스페이스 관리자가 콘솔의 설정 > 워크스페이스 > API 키에서 키 이름을 입력하고 발급을 선택합니다(이용가이드 5.2 워크스페이스). 발급된 키는 한 번만 표시되므로 복사해 안전하게 보관합니다.

Note

API 키는 사용이 승인된 조직에서만 발급할 수 있습니다. 사용 신청은 geotracker@humuson.com로 문의해 주세요.

2. 최근 진단 결과 조회

{workspaceId}를 조회할 워크스페이스의 ID로, {apiKey}를 해당 워크스페이스에서 발급한 API 키로 대체합니다.

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/diagnostics/latest' \
    -H 'Authorization: Bearer {apiKey}'

저장된 진단 결과가 없으면 404와 오류 코드 no_data를 반환합니다.

인증

Authorization 헤더에 API 키를 Bearer {apiKey} 형식으로 지정합니다. 쿼리 파라미터나 쿠키를 통한 인증은 지원하지 않습니다.

Authorization: Bearer {apiKey}

인증이 필요한 요청에 API 키가 없거나 유효하지 않으면 401과 오류 코드 unauthorized를 반환합니다.

Warning

분실한 API 키는 다시 조회할 수 없습니다. 새 키를 발급하고 기존 키를 삭제해야 합니다.

오류

오류가 발생하면 HTTP 상태 코드와 함께 다음 형식의 JSON 본문을 반환합니다.

{
  "error": {
    "code": "workspace_mismatch",
    "message": "This API key does not belong to the requested workspace.",
    "requestId": "73afb161-0238-418c-bc45-00fc6b32dbd8"
  }
}
PathTypeDescription
error.codeString오류 코드입니다. 오류별 처리 조건으로 사용합니다.
error.messageString오류 설명입니다. 문구가 변경될 수 있으므로 처리 조건에는 error.code를 사용합니다.
error.requestIdString요청 식별자입니다. 오류 문의 시 이 값을 전달해 주세요. x-request-id 응답 헤더에도 같은 값이 포함됩니다.

코드별 HTTP 상태와 발생 조건은 오류 코드 목록을 참고하세요.

최근 진단 결과 조회

완료된 진단 중 최신 결과의 종합 점수, 등급, 항목별 판정 결과를 조회합니다. 같은 브랜드에 속한 워크스페이스는 진단 결과를 공유합니다.

GET/workspaces/{workspaceId}/diagnostics/latest

Path Parameters

NameTypeDescription
workspaceIdString조회할 워크스페이스의 ID입니다.

Response Structure

PathTypeDescription
scanIdString진단 ID입니다.
scannedAtString진단 시각입니다. ISO 8601 형식의 UTC 문자열입니다.
urlString진단한 페이지 주소입니다.
domainString진단한 페이지의 호스트입니다.
scoreNumber종합 점수입니다. 0부터 100까지입니다.
gradeString진단 등급입니다. 우수, 양호, 보통, 개선 필요, 측정 불충분, 수집 차단 중 하나입니다. 점수 외에 핵심 항목의 판정 결과와 측정 가능 여부도 반영합니다.
items[]Array진단 항목 목록입니다.
items[].keyString진단 항목 코드입니다. 예: robots_txt
items[].labelString항목 이름입니다.
items[].categoryStringcrawl(수집 가능성) meta(메타 정보) perf(콘텐츠 전달) aeo(검색 답변 대비) geo(AI 인용 대비) 중 하나입니다.
items[].resultStringpass(통과), warn(주의), fail(실패), unknown(판정 불가), not_applicable(해당 없음) 중 하나입니다.
items[].scoreNumber항목 점수입니다.
items[].weightNumber항목 배점입니다.
items[].messageString판정 결과 요약입니다.

Example Request

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/diagnostics/latest' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "scanId" : "01a02d34-7e21-72c1-bc5b-95efea519b11",
  "scannedAt" : "2026-08-20T01:00:09.983Z",
  "url" : "https://www.movefit.co.kr/",
  "domain" : "www.movefit.co.kr",
  "score" : 78,
  "grade" : "보통",
  "items" : [ {
    "key" : "robots_txt",
    "label" : "robots.txt",
    "category" : "crawl",
    "result" : "pass",
    "score" : 7,
    "weight" : 7,
    "message" : "1/1 기준 모두 통과"
  }, {
    "key" : "sitemap",
    "label" : "sitemap.xml",
    "category" : "crawl",
    "result" : "fail",
    "score" : 0,
    "weight" : 8,
    "message" : "sitemap을 가져오지 못함 · 크롤러도 읽을 수 없음"
  }, {
    "key" : "geo_ai_crawler_access",
    "label" : "AI crawler 접근 정책",
    "category" : "geo",
    "result" : "pass",
    "score" : 8,
    "weight" : 8,
    "message" : "3/3 기준 모두 통과"
  } ]
}

Errors

StatusCodeDescription
404no_data조회할 진단 결과가 없습니다.

AI 답변 노출 조회

지정한 기간의 AI 답변에서 브랜드의 언급 건수, 평균 순위, 상위 3위 노출 건수와 경쟁 브랜드별 지표를 조회합니다.

GET/workspaces/{workspaceId}/geo

Path Parameters

NameTypeDescription
workspaceIdString조회할 워크스페이스의 ID입니다.

Query Parameters

NameTypeDescription
periodString선택입니다. 7d 30d 90d all 중 하나이며 기본값은 30d입니다. 최근 수집일을 기준으로 7일, 30일, 90일 또는 전체 기간을 조회합니다. from·to와 함께 사용할 수 없습니다.
fromString선택입니다. 시작일을 YYYY-MM-DD로 지정합니다. to와 함께 사용합니다.
toString선택입니다. 종료일을 YYYY-MM-DD로 지정합니다. from과 함께 사용하며, 시작일보다 빠를 수 없습니다.

Response Structure

PathTypeDescription
range.fromString집계 시작일입니다. YYYY-MM-DD 형식입니다.
range.toString집계 종료일입니다. YYYY-MM-DD 형식입니다.
range.snapshotCountNumber집계 기간 중 데이터가 있는 날짜 수입니다.
sampleSizeNumber집계에 포함된 AI 답변 수입니다.
mentionRate.mentionedNumber브랜드가 언급된 답변 수입니다.
mentionRate.totalNumber집계에 포함된 전체 답변 수입니다.
averageRankNumber브랜드가 언급된 답변의 평균 순위입니다. 순위가 없으면 언급 순서를 사용합니다. 계산할 순위나 언급 순서가 없으면 null입니다.
top3CountNumber브랜드 순위가 3위 이내인 답변 수입니다. 순위가 없는 답변은 제외합니다.
competitors[]Array등록된 경쟁 브랜드와 답변에서 확인된 경쟁 브랜드의 지표입니다. 자사는 제외합니다.
competitors[].nameString경쟁 브랜드 이름입니다.
competitors[].isPrimaryBoolean주요 경쟁 브랜드로 지정되어 있으면 true입니다.
competitors[].exposedCountNumber이 브랜드가 언급된 답변 수입니다.
competitors[].totalCountNumber집계에 포함된 전체 답변 수입니다.
competitors[].averageRankNumber경쟁 브랜드의 평균 순위입니다. 순위가 없으면 언급 순서를 사용합니다. 계산할 순위나 언급 순서가 없으면 null입니다.

Example Request

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/geo?period=30d' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "range" : {
    "from" : "2026-07-22",
    "to" : "2026-08-20",
    "snapshotCount" : 17
  },
  "sampleSize" : 504,
  "mentionRate" : {
    "mentioned" : 271,
    "total" : 504
  },
  "averageRank" : 2.8,
  "top3Count" : 46,
  "competitors" : [ {
    "name" : "요가라인",
    "isPrimary" : true,
    "exposedCount" : 188,
    "totalCount" : 504,
    "averageRank" : 1.9
  }, {
    "name" : "핏하우스",
    "isPrimary" : false,
    "exposedCount" : 124,
    "totalCount" : 504,
    "averageRank" : 2.5
  } ]
}

Errors

StatusCodeDescription
400invalid_parameter기간 값이나 날짜 형식·순서가 잘못되었거나, from·to 중 하나가 누락되었거나, period와 날짜를 함께 지정했습니다.
404no_data조회할 AI 답변 데이터가 없습니다.

검색 답변 노출 조회

지정한 기간의 Google·Naver·YouTube 검색 결과와 Google AI Overview·Naver AI 브리핑에서 브랜드 언급률과 자사 콘텐츠 노출률을 조회합니다.

GET/workspaces/{workspaceId}/aeo

Path Parameters

NameTypeDescription
workspaceIdString조회할 워크스페이스의 ID입니다.

Query Parameters

NameTypeDescription
periodString선택입니다. 7 30 90 all 중 하나이며 기본값은 30입니다. 한국 시간 기준 오늘을 포함한 최근 7일, 30일, 90일 또는 전체 기간을 조회합니다. from·to와 함께 사용할 수 없습니다.
fromString선택입니다. 시작일을 YYYY-MM-DD로 지정합니다. to와 함께 사용합니다.
toString선택입니다. 종료일을 YYYY-MM-DD로 지정합니다. from과 함께 사용하며, 시작일보다 빠를 수 없습니다.

Response Structure

PathTypeDescription
range.fromString집계 시작일입니다. YYYY-MM-DD 형식이며, period=all이면 null입니다.
range.toString집계 종료일입니다. YYYY-MM-DD 형식입니다.
kpi.organicBrandMentionObject일반 검색 결과에 브랜드명이나 등록된 별칭이 포함된 비율입니다.
kpi.organicExposureObject일반 검색 결과에 자사 콘텐츠가 하나 이상 포함된 비율입니다.
kpi.averageGoogleRank.valueNumberGoogle 일반 검색 상위 20위에 노출된 자사 페이지의 평균 순위입니다. 순위가 있는 자사 페이지가 없으면 null입니다.
kpi.averageGoogleRank.sampleSizeNumber평균 순위 계산에 포함된 자사 페이지 노출 건수입니다.
kpi.aiGenerationObjectGoogle AI Overview·Naver AI 브리핑 수집 결과 중 AI 답변이 생성된 비율입니다. 수집에 실패한 건은 제외합니다.
kpi.aiBrandMentionObject생성된 AI 답변 중 본문에 브랜드명이나 등록된 별칭이 포함된 비율입니다.
kpi.aiOwnedCitationObject생성된 AI 답변 중 자사 URL이 출처로 하나 이상 인용된 비율입니다.
kpi.*.countNumber각 비율 지표의 조건에 해당하는 수집 건수입니다.
kpi.*.totalNumber각 비율 지표의 집계 대상 수집 건수입니다. 일반 검색 지표는 검색 결과가 있는 건만 포함합니다.
kpi.*.rateNumbercount / total × 100을 소수점 첫째 자리로 반올림한 값입니다. total이 0이면 null입니다.
keywords[]Array조회 기간에 수집 이력이 있는 키워드 목록입니다.
keywords[].keywordString검색 키워드입니다.
keywords[].isActiveBoolean현재 수집 대상으로 활성화되어 있으면 true입니다.

Example Request

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/aeo?period=30' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "range" : {
    "from" : "2026-07-27",
    "to" : "2026-08-25"
  },
  "kpi" : {
    "organicBrandMention" : { "count" : 16, "total" : 16, "rate" : 100 },
    "organicExposure" : { "count" : 7, "total" : 16, "rate" : 43.8 },
    "averageGoogleRank" : { "value" : 4.5, "sampleSize" : 4 },
    "aiGeneration" : { "count" : 16, "total" : 16, "rate" : 100 },
    "aiBrandMention" : { "count" : 7, "total" : 16, "rate" : 43.8 },
    "aiOwnedCitation" : { "count" : 1, "total" : 16, "rate" : 6.3 }
  },
  "keywords" : [ {
    "keyword" : "요가매트 추천",
    "isActive" : true
  }, {
    "keyword" : "홈트 매트 두께",
    "isActive" : true
  } ]
}

Errors

StatusCodeDescription
400invalid_parameterperiod7 30 90 all 중 하나가 아니거나, periodfrom·to를 함께 지정했거나, 날짜 형식·순서가 맞지 않거나, from·to 중 하나만 지정했습니다.
404no_data조회 기간에 수집 이력이 없습니다.

종합 리포트 조회

진단 결과와 AI 답변·검색 노출을 종합한 리포트를 조회합니다. 응답은 장(chapters)과 각 장의 내용인 블록(blocks)으로 구성됩니다.

GET/workspaces/{workspaceId}/report

Path Parameters

NameTypeDescription
workspaceIdString대상 워크스페이스의 ID입니다.

Query Parameters

NameTypeDescription
periodString선택입니다. 7d 30d 90d all 중 하나이며 기본값은 30d입니다. 진단·AI 답변·검색 데이터가 있는 최근 날짜를 기준으로 7일, 30일, 90일 또는 전체 기간을 조회합니다. from·to와 함께 사용할 수 없습니다.
from, toString선택입니다. 시작일과 종료일을 YYYY-MM-DD 형식으로 모두 지정합니다. 종료일은 시작일보다 빠를 수 없습니다.

Response Structure

PathTypeDescription
range.fromString집계 시작일입니다. YYYY-MM-DD 형식입니다.
range.toString집계 종료일입니다. YYYY-MM-DD 형식입니다.
range.snapshotCountNumber집계 기간 중 진단·AI 답변·검색 데이터가 있는 날짜 수입니다.
brandString브랜드 이름입니다.
domainString브랜드의 대표 도메인입니다.
chapters[]Array리포트 순서대로 정렬된 장 목록입니다. 데이터가 없는 항목의 장은 제외됩니다.
chapters[].keyStringsummary(요약) competitor(경쟁 브랜드 비교) llm(LLM 답변 노출) aeo(검색 답변 영역 노출) seo(자사 사이트의 인용 준비도) action(실행 계획) 중 하나입니다.
chapters[].titleString장 제목입니다.
chapters[].blocks[]Array장의 내용을 구성하는 블록 목록입니다. 필드는 블록 종류에 따라 다릅니다.

Example Request

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/report?period=30d' \
    -H 'Authorization: Bearer {apiKey}'

Example Response (일부)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "range" : {
    "from" : "2026-07-25",
    "to" : "2026-08-23",
    "snapshotCount" : 19
  },
  "brand" : "무브핏",
  "domain" : "movefit.co.kr",
  "chapters" : [ {
    "key" : "summary",
    "title" : "요약",
    "blocks" : [ {
      "kind" : "paragraphs",
      "items" : [ "최근 30일 동안 AI 답변에서 브랜드가 언급된 비율은 54%입니다." ]
    } ]
  }, {
    "key" : "competitor",
    "title" : "경쟁 브랜드 비교",
    "blocks" : [ {
      "kind" : "heading",
      "text" : "브랜드 언급률"
    }, {
      "kind" : "bars",
      "rows" : [ {
        "name" : "무브핏",
        "value" : 271,
        "max" : 504,
        "label" : "54%",
        "mark" : true
      }, {
        "name" : "요가라인",
        "value" : 188,
        "max" : 504,
        "label" : "37%"
      } ]
    } ]
  } ]
}

블록 종류

kind는 블록 종류를 나타냅니다. 지원하지 않는 kind는 표시에서 제외합니다.

kind필드Description
paragraphsitems[]문단 문자열 목록입니다.
headingtext장 안의 소제목입니다.
notelabel, text안내 문구입니다.
figuresitems[].label, items[].value, items[].note지표의 이름·값·보충 설명입니다.
barscaption, rows[].name, rows[].nameSub, rows[].value, rows[].max, rows[].label, rows[].mark가로 막대 차트입니다. value는 값, max는 막대 길이의 기준값, mark는 강조 여부입니다.
tablecolumns[].label, columns[].num, rows[].self, rows[].cells[].text, rows[].cells[].sub표입니다. num은 숫자 열 여부, self는 자사 행 여부입니다.
heatmaprowHeader, columnLabels[], caption, rows[].name, rows[].nameSub, rows[].cells[], rows[].labels[], rows[].total, rows[].isSelf히트맵입니다. cells는 각 셀의 수치, labels는 표시 문구입니다.
lineChartdates[], series[].name, series[].isSelf, series[].values[]시계열 차트입니다. valuesdates와 같은 순서이며, null은 해당 날짜의 값이 없음을 나타냅니다.
gatesrows[].order, rows[].label, rows[].value, rows[].status, rows[].detail, rows[].blocked단계별 평가 결과입니다. blocked는 리포트에서 진행을 제한하는 단계로 판정되었는지를 나타냅니다.
questionKeysitems[].label, items[].question질문 약칭과 원문 목록입니다.
groupblocks[]하위 블록 목록입니다. 각 블록은 이 표의 구조를 따릅니다.

Errors

StatusCodeDescription
400invalid_parameter기간 값이나 날짜 형식·순서가 올바르지 않거나, from·to 중 하나만 지정했거나, period와 날짜를 함께 지정했습니다.
404no_data리포트를 생성할 데이터가 없거나 대표 URL이 등록되어 있지 않습니다.

질문 목록 조회

AI 답변 수집에 사용하는 질문 목록을 조회합니다. 보관된 질문은 포함하고 삭제된 질문은 제외합니다.

GET/workspaces/{workspaceId}/questions

Response Structure

PathTypeDescription
questions[]Array질문 목록입니다.
questions[].idString질문 ID입니다.
questions[].queryString질문 문구입니다.
questions[].isActiveBoolean수집 대상이면 true, 보관된 질문이면 false입니다.
questions[].createdAtString질문 등록 시각입니다. ISO 8601 형식의 UTC 문자열입니다.
activeLimitNumber활성 질문 수의 한도입니다. null이면 제한이 없습니다.

Example Request

curl -i 'https://{host}/api/v1/workspaces/{workspaceId}/questions' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "questions" : [ {
    "id" : "019fcbfb-e57f-702f-bc63-c0827329ac8f",
    "query" : "요가매트 추천",
    "isActive" : true,
    "createdAt" : "2026-08-04T08:55:10.975Z"
  }, {
    "id" : "019fcbfb-f883-7d0b-8af6-219877f23a81",
    "query" : "홈트 매트 두께 어느 정도가 좋아?",
    "isActive" : false,
    "createdAt" : "2026-08-04T08:55:15.843Z"
  } ],
  "activeLimit" : 10
}

질문 추가

AI 답변 수집에 사용할 질문을 추가합니다. 같은 문구의 질문이 있으면 기존 질문을 반환하며, 보관되거나 삭제된 질문은 다시 활성화합니다. 기존 idcreatedAt은 유지됩니다.

POST/workspaces/{workspaceId}/questions

Request Structure

PathTypeDescription
queryString필수입니다. 앞뒤 공백을 제거하고 연속 공백을 한 칸으로 바꾼 후 1~500자여야 합니다. 중복 여부는 대소문자를 구분하여 판단합니다.

Response Structure

PathTypeDescription
idString질문 ID입니다.
queryString공백을 정리하여 저장한 질문 문구입니다.
isActiveBoolean추가된 질문은 true입니다.
createdAtString질문 등록 시각입니다. ISO 8601 형식의 UTC 문자열입니다.

Example Request

curl -i -X POST 'https://{host}/api/v1/workspaces/{workspaceId}/questions' \
    -H 'Authorization: Bearer {apiKey}' \
    -H 'Content-Type: application/json' \
    -d '{"query":"요가매트 추천"}'

Example Response

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id" : "019fcbfb-e57f-702f-bc63-c0827329ac8f",
  "query" : "요가매트 추천",
  "isActive" : true,
  "createdAt" : "2026-08-04T08:55:10.975Z"
}

기존 질문의 문구 수정은 지원하지 않습니다. 변경하려면 기존 질문을 삭제하고 새 문구로 추가합니다.

Errors

StatusCodeDescription
400invalid_parameter본문이 JSON이 아니거나, query가 문자열이 아니거나, 공백 정리 후 길이가 1~500자가 아닙니다.
409limit_exceeded활성 질문 수의 한도에 도달했습니다.

질문 삭제

질문을 목록에서 삭제하고 수집 대상에서 제외합니다. 기존 수집 결과는 삭제하지 않습니다.

DELETE/workspaces/{workspaceId}/questions/{questionId}

Path Parameters

NameTypeDescription
workspaceIdString대상 워크스페이스의 ID입니다.
questionIdString삭제할 질문의 ID입니다.

Response Structure

PathTypeDescription
idString삭제한 질문의 ID입니다.
collectionInProgressBoolean오늘(한국 시간) 해당 워크스페이스의 AI 답변 수집이 진행 중이면 true입니다.

Example Request

curl -i -X DELETE 'https://{host}/api/v1/workspaces/{workspaceId}/questions/{questionId}' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id" : "019fcbfb-e57f-702f-bc63-c0827329ac8f",
  "collectionInProgress" : false
}

Errors

StatusCodeDescription
404not_found해당 워크스페이스에 질문이 없거나 이미 삭제되었습니다.

진단·수집 요청

사이트 진단, AI 답변 수집, 검색 수집을 요청합니다. 작업은 비동기로 실행하며, 응답에는 접수 결과를 반환합니다.

POST/workspaces/{workspaceId}/runs

요청 본문은 없습니다. 세 종류의 작업을 모두 요청합니다.

Response Structure

PathTypeDescription
accepted[]Array접수된 작업 종류의 목록입니다. 각 값은 diagnostic(사이트 진단), geo(AI 답변 수집), aeo(검색 수집) 중 하나입니다.
skipped[]Array접수되지 않은 작업 목록입니다.
skipped[].kindString접수되지 않은 작업 종류입니다.
skipped[].reasonString미접수 사유입니다. 아래 사유 목록을 참고하세요.

Example Request

curl -i -X POST 'https://{host}/api/v1/workspaces/{workspaceId}/runs' \
    -H 'Authorization: Bearer {apiKey}'

Example Response

HTTP/1.1 202 Accepted
Content-Type: application/json

{
  "accepted" : [ "diagnostic", "geo" ],
  "skipped" : [ {
    "kind" : "aeo",
    "reason" : "aeo_quota_exceeded"
  } ]
}

하나 이상 접수되면 202, 세 작업 모두 접수되지 않으면 409 conflict를 반환합니다. 409 응답의 error.message에는 작업별 미접수 사유가 포함됩니다.

HTTP/1.1 409 Conflict
Content-Type: application/json

{
  "error" : {
    "code" : "conflict",
    "message" : "Nothing could be started: diagnostic=recently_scanned, geo=no_active_questions, aeo=aeo_unavailable",
    "requestId" : "e023e4ce-6be2-4e29-8e35-1333373336d8"
  }
}

미접수 사유

실행reasonDescription
diagnosticno_primary_url진단할 대표 URL이 등록되어 있지 않습니다.
recently_scanned최근 1시간 안에 같은 조건으로 진단했습니다.
already_running진단이 이미 진행 중입니다.
no_canonical_domain브랜드 도메인이 등록되어 있지 않습니다.
url_outside_workspace진단 URL이 워크스페이스의 도메인에 속하지 않습니다.
url_not_public진단 URL이 공개 웹 주소가 아닙니다.
dns_lookup_failed진단 URL의 DNS 조회에 실패했습니다.
invalid_url진단 URL의 형식이 올바르지 않습니다.
internal_error서버 오류로 진단을 시작하지 못했습니다.
geono_canonical_domain브랜드 도메인이 등록되어 있지 않습니다.
no_active_questions활성 질문이 없습니다.
geo_quota_exceeded조직의 월 한도를 모두 사용했습니다.
daily_run_limit일일 수동 실행 한도에 도달했습니다.
already_running오늘(한국 시간) AI 답변 수집이 이미 진행 중입니다.
aeoaeo_unavailable검색 수집이 비활성화되어 있거나, 도메인·대표 URL·활성 키워드 중 필요한 설정이 없습니다.
aeo_quota_exceeded조직의 월 한도를 모두 사용했습니다.
serpapi_limit_exhausted서비스 전체가 공유하는 검색 한도가 소진되었습니다.

진단 결과는 최근 진단 결과 조회에서 scanIdscannedAt으로 구분합니다. 수집 결과는 AI 답변 노출 조회검색 답변 노출 조회에서 확인합니다. 작업별 상태 조회 API와 완료 알림 웹훅은 제공하지 않습니다.

Errors

StatusCodeDescription
404not_found워크스페이스가 속한 조직을 찾을 수 없습니다.
409conflict세 작업 모두 접수되지 않았습니다.

부록: 오류 코드

CodeStatusDescription
unauthorized401API 키가 없거나 유효하지 않습니다.
workspace_mismatch403요청한 워크스페이스와 API 키의 워크스페이스가 다릅니다.
invalid_parameter400필수 값이 없거나 요청 값의 형식·범위가 올바르지 않습니다.
method_not_allowed405해당 경로에서 지원하지 않는 HTTP 메서드입니다.
no_data404조회할 데이터가 없습니다.
not_found404요청한 리소스가 없습니다.
limit_exceeded409활성 질문 수의 한도에 도달했습니다.
conflict409현재 상태에서는 요청을 수행할 수 없습니다.
internal_error500서버 내부 오류입니다. 오류 문의 시 requestId를 전달해 주세요.