시작하기
- 조직 → API 키 탭에서 키를 발급해요. 원문은 발급할 때 한 번만 보여 줘요.
- 모든 요청에
Authorization: Bearer rwk_…를 붙여요. - 워크스페이스는 키가 발급된 회사로 고정돼요. 키에 개인 워크스페이스는 없어요.
| 권한 | 할 수 있는 일 |
|---|---|
read | 도메인 · 스캔 · 리포트 조회 |
scan | 조회 + 스캔 시작 · TXT 재확인 |
회사가 2단계 인증·허용 IP를 켜 두면 API 키도 같은 정책을 따라요. 정책 밖에서는 403이 돌아와요.
엔드포인트
GET
/api/domains읽기 전용워크스페이스에 등록된 도메인 목록.
{
"domains": [
{ "id": 12, "domain": "example.com", "scope": "single", "status": "verified",
"consent_signed": true, "txt_token": "…", "created_at": "2026-10-06T08:12:00Z" }
]
}
status— pending(미인증) · verified(인증됨) · stale(재인증 필요)scope— single · sweep
GET
/api/scans읽기 전용스캔 목록 + 남은 크레딧 + 구독 정보.
{
"scans": [ { "id": 340, "domain": "example.com", "status": "done",
"phase": "reporting", "finding_count": 6, "cost_krw": "3720", "created_at": "…" } ],
"credits": 3,
"subscription": { "plan": "growth", "status": "active", "next_charge_at": "…" }
}
status— pending_payment · running · done · failed · canceled
GET
/api/scans/{id}읽기 전용한 스캔의 발견 사항 · 증거 · 도구 실행 기록.
{
"scan": { "id": 340, "status": "done", "finding_count": 6 },
"findings": [
{ "id": 91, "severity": "high", "title": "/backup 디렉터리가 공개됨",
"target_url": "https://example.com/backup/", "remediation": "…", "advisory": "…",
"status": "open", "evidence": [ { "kind": "http", "preview": "HTTP/1.1 200 OK…" } ] }
],
"actions": [ { "tool": "nuclei_scan", "host": "example.com", "verdict": "allow", "ts": "…" } ]
}
- 증거의 개인정보는 저장 전에 마스킹됩니다
severity— critical · high · medium · low · info?lang=ko|en— 발견 항목의 제목·설명·조치 방법·증거와 종합 리포트(scan.report_md)를 그 언어로 번역해서 돌려줘요. 번역이 아직 만들어지는 중이면 원문과 함께tr_pending이 0보다 큰 값으로 와요(몇 초 뒤 다시 호출).
GET
/api/scans/{id}/report.{pdf|docx|xlsx|hwpx}읽기 전용끝난 스캔의 리포트 파일 — PDF(공유·보관) · Word(.docx, 수정·전달) · Excel(.xlsx, 조치 추적표: 조치 상태 선택·담당자·기한) · 한글(.hwpx). 심각도 요약, 발견 항목별 위치·분류(CWE)·위험 점수(CVSS)·고치는 방법·증거가 들어 있어요.
?lang=ko|en— 파일 언어(기본 ko). 번역본이 없으면 만들어질 때까지 기다린 뒤 내려줘요(최대 90초).?tz=Asia/Seoul— 날짜·시각 표기에 쓸 시간대(IANA, 기본 Asia/Seoul).- 진행 중인 스캔은
409 scan_not_finished, 없는 스캔·형식은404. 10분에 30회, 동시에 2건까지 만들어요. - 응답은
Content-Disposition: attachment이고 캐시되지 않아요.
POST
/api/scans스캔 실행스캔 시작. 점검 강도(tier)에 따라 크레딧이 필요해요 — fast 1개 · thorough 2개(기본) · deep 3개. 구독은 자동 재점검과 매달 크레딧 지급을 포함하지만, 수동 스캔은 항상 크레딧을 써요.
# 요청 — tier: thorough(기본) | fast | deep
{ "domainId": 12 }
{ "domainId": 12, "tier": "deep" }
# 옛 형식(engine·mode)도 받아요 — 같은 강도로 해석돼요: strix+deep → deep, strix+standard → thorough, strix+quick·redwolf → fast
{ "domainId": 12, "engine": "strix", "mode": "deep" }
# 응답 200
{ "scan": { "id": 341, "status": "pending_payment" } }
# 실패
{ "error": "consent_required" } # TXT 미인증 · 동의서 필요
{ "error": "payment_required" } # 크레딧이 모자람
{ "error": "auth_engine_unsupported" } # 로그인 자격(auth)은 tier=fast 에서만
{ "error": "scan_already_running" }
- 4중 관문(TXT · 동의서 · 결제 · 네트워크 고정)을 통과해야 실제로 시작됩니다
- 워크스페이스당 동시에 1개만 실행됩니다
POST
/api/domains/{id}/verify스캔 실행도메인 DNS TXT 재확인 (+ 동의서 메일 재발송).
{ "verified": true, "consent_sent": true, "consent_signed": false }
- TXT 레코드는
_redwolf.<도메인>, 값은 도메인 카드에 표시됩니다 - 메일 발송 상한이 있어 연속 호출은
429
curl 예시
export REDME_KEY=rwk_… # 발급받은 키
export REDME=https://redme.ai
# 도메인 목록
curl -H "Authorization: Bearer $REDME_KEY" $REDME/api/domains
# 스캔 시작 (domainId 는 도메인 목록에서)
curl -X POST -H "Authorization: Bearer $REDME_KEY" -H "Content-Type: application/json" \
-d '{"domainId":12,"kind":"oneshot"}' $REDME/api/scans
# 결과가 나올 때까지 상태 확인
curl -H "Authorization: Bearer $REDME_KEY" $REDME/api/scans/341
# 리포트 파일(영어 Word)
curl -H "Authorization: Bearer $REDME_KEY" -o report.docx "$REDME/api/scans/341/report.docx?lang=en"
- 스캔은 몇 분 걸릴 수 있어요.
status가done이 되면 리포트를 읽으세요.
오류
오류는 {"error":"code"} 형태로 돌아옵니다.
| HTTP | code | 뜻 | 해결 |
|---|---|---|---|
401 | invalid_api_key | 키가 폐기됐거나 형식이 잘못됨 | 키를 다시 발급 |
403 | forbidden_role | 키 권한으로는 할 수 없는 작업 | scan 권한 키 발급 |
403 | mfa_required | 회사가 2단계 인증을 요구하는데 키 발급자가 미등록 | 발급자가 [계정] 탭에서 등록 |
403 | ip_not_allowed | 회사의 허용 IP 밖에서 호출 | 회사 관리자에게 IP 등록 요청 |
402 | payment_required | 크레딧 · 구독 없음 | 요금제에서 결제 |
412 | txt_not_verifiedconsent_required | 도메인 소유 · 동의 관문 미통과 | 도메인 카드의 안내대로 처리 |
429 | scan_already_runningrate_limited | 동시 스캔 1개 제한 또는 호출 상한 | 잠시 후 재시도 |
알아 둘 것
- 점검은 4중 관문(TXT 소유권 · 동의서 · 결제 · 네트워크 고정)을 통과해야 시작돼요. API로도 우회할 수 없어요.
- 스캔 중 발견된 범위 밖 호스트는
out_of_scope_observed정보성으로만 기록되고 점검되지 않아요. - 증거의 개인정보는 저장 전에 마스킹되고 90일 뒤 자동 파기돼요.
- 호출 상한이 있어요(스캔 10분당 12회 등). 초과하면
429예요. - 감사 기록은 조직 → 감사 로그 탭에서 CSV로 내려받을 수 있어요.
- API 키로는 결제·요금제 변경·멤버 관리가 안 돼요. 그건 사람이 화면에서 해요.