GET/api/ti/daily-analysis
일일 위협분석 조회 (최근 N일)
하루 단위 분석 스냅샷(ioclog.ti_daily_analysis). analysis_date DESC 로 최근 N일 반환. 오늘은 갱신 가능, 과거는 불변. ti:read.
Query parameters
daysinteger
반환할 최대 일수(1~365)
Responses
200 OK — { rows: [{analysis_date, collected, env_matched, indicators, updated_at}] }401 인증 실패
cURLcurl -X GET https://scti.in-bridge.com/api/ti/daily-analysis?days=0 \
-H "Authorization: Bearer $TOKEN"
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/daily-analysis", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const data = await res.json();
POST/api/ti/daily-analysis
오늘 분석 upsert (ti:write)
본문 { collected, env_matched, indicators } 를 오늘(CURRENT_DATE) 행에만 upsert한다. 서버가 analysis_date=CURRENT_DATE 로 고정 → 과거 날짜는 쓸 수 없다(과거 불변).
Request body
collectedinteger
그날 신규 수집 IOC 수(ti_ioc.first_seen 기준 실측).
env_matchedinteger
env>0 인 지표 수.
indicatorsobject[]
지표별 상관 매치 요약.
Responses
200 OK — { success, row }401 ti:write 필요
cURLcurl -X POST https://scti.in-bridge.com/api/ti/daily-analysis \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"collected":0,"env_matched":0,"indicators":[{"value":"string","type":"string","label":"string","ti":0,"os":0,"ocsf":0,"osa":0,"env":0}]}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/daily-analysis", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"collected": 0,
"env_matched": 0,
"indicators": [
{
"value": "string",
"type": "string",
"label": "string",
"ti": 0,
"os": 0,
"ocsf": 0,
"osa": 0,
"env": 0
}
]
})
});
const data = await res.json();
POST/api/ti/lookup
통합 IOC 조회
1~100개의 indicator 를 자동 분류 후 로컬 DB/캐시에서 조회. 미탐 indicator 는 외부 enrichment 큐로 적재.
Request body
indicatorsstring[]required
Responses
200 OK401 인증 실패429 레이트리밋 초과
resultsLookupResult[]
detected_typeenum
md5sha1sha256ipv4ipv6domainurlcvemitreaptunknown
verdictenum
benignmaliciousinfosuspicious_rareunknownunsupported
sourcesLookupSource[]
detailsobject
소스별 상세(예: cve_epss → {epss, percentile, score_date}, cve_exploit → {exploit_sources, total_refs})
cURLcurl -X POST https://scti.in-bridge.com/api/ti/lookup \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"indicators":["string"]}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/lookup", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"indicators": [
"string"
]
})
});
const data = await res.json();
Response 200{
"success": true,
"results": [
{
"indicator": "string",
"detected_type": "md5",
"normalized_value": "string",
"verdict": "benign",
"sources": [
{
"db": "string",
"matched": true,
"confidence": "string",
"details": null
}
]
}
],
"stats": null,
"performance": null
}
POST/api/ti/stats
Top-N 집계
MITRE technique/tactic 빈도 + APT 출신국가(etda_apt_groups) 분포 Top-N.
Request body
dimensionenumrequired
mitre_techniquemitre_tacticapt
cURLcurl -X POST https://scti.in-bridge.com/api/ti/stats \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"dimension":"mitre_technique","limit":0}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/stats", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dimension": "mitre_technique",
"limit": 0
})
});
const data = await res.json();
POST/api/ti/watchlist
관심 IOC 등록 (ti:write)
indicator 는 classifyIoc 로 타입판별·정규화·멱등 upsert.
Request body
indicatorsstring | object[]required
문자열(인디케이터) 또는 객체. classifyIoc 로 타입판별·정규화 후 멱등 upsert.
Responses
200 OK400 indicators 1~1000개 필요401 ti:write 필요
cURLcurl -X POST https://scti.in-bridge.com/api/ti/watchlist \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"indicators":["string"]}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/watchlist", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"indicators": [
"string"
]
})
});
const data = await res.json();
GET/api/ti/news
보안/TI/AI 뉴스 피드 (Sentivex /news 5종)
ioclog.ti_news(RSS/Atom 수집) 를 카테고리별로 서빙. category=security|ti|ai|llm|secai (없으면 all). ai/llm/secai 는 원천 피드 추가 전까지 빈 배열.
Query parameters
categoryenum
securitytiaillmsecai
Responses
200 OK — {category,total,items[{title,link,source,lang,published,summary,category}]}400 지원하지 않는 category401 인증 실패
cURLcurl -X GET https://scti.in-bridge.com/api/ti/news?category=security&limit=0&offset=0 \
-H "Authorization: Bearer $TOKEN"
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/news", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const data = await res.json();
GET/api/ti/ransomware
최근 랜섬웨어 피해자 (다크웹 유출사이트 파생)
ransomware.live(무료 다크웹 랜섬웨어 트래커)를 대신 소비해 적재한 ioclog.ransomware_victims. Tor 미접촉=안전. 점수 비노출.
Responses
200 OK — {total, items[{victim,group,country,activity,domain,attackDate,discovered,claimUrl,screenshot}], groups[{group,count}]}401 인증 실패
cURLcurl -X GET https://scti.in-bridge.com/api/ti/ransomware?limit=0&offset=0&group=string \
-H "Authorization: Bearer $TOKEN"
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/ransomware", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const data = await res.json();
GET/api/ioc-investigation
IOC 조사 API 설명
IOC investigation API의 지원 타입, 인증 방식, POST request 예시를 반환하는 public-read 문서/헬스 엔드포인트.
cURLcurl -X GET https://scti.in-bridge.com/api/ioc-investigation
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ioc-investigation", {
method: "GET"
});
const data = await res.json();
POST/api/ioc-investigation
IOC 조사
IOC 심층 조사(외부 소스 연계).
cURLcurl -X POST https://scti.in-bridge.com/api/ioc-investigation \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"indicator":"string"}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ioc-investigation", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"indicator": "string"
})
});
const data = await res.json();
POST/api/ti/correlate
상관관계 job 등록
value를 ioclog.ti_correlation_job 큐에 등록한다. ti-correlation-worker가 OpenSearch incidents/alerts와 PostgreSQL TI 테이블을 실제 조회하고 step을 저장한다.
인증 필요(Bearer 또는 로그인 세션) + OIDC 스코프 ti:read.
Responses
202 Queued or existing recent job400 value required
statusenum
queuedrunningdonefailed
verdictenum
pendingmatchedno_matchunknown
stepsCorrelationStep[]
statusenum
queuedrunningdonefailed
createdAtstring<date-time>
cURLcurl -X POST https://scti.in-bridge.com/api/ti/correlate \
-H "Content-Type: application/json" \
-d '{"value":"string"}'
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/correlate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": "string"
})
});
const data = await res.json();
Response 202{
"id": "00000000-0000-0000-0000-000000000000",
"value": "string",
"type": "string",
"status": "queued",
"verdict": "pending",
"result": null,
"error": "string",
"steps": [
{
"order": 0,
"key": "string",
"status": "queued",
"message": "string",
"evidence": null,
"createdAt": "2026-07-08T00:00:00Z"
}
]
}
GET/api/ti/sightings
IOC별 역추적 관측 이력 (Sightings, #83)
correlate(W3)가 우리 환경(OCSF finding·SA detector·activity)에서 잡은 hit 을 영속한 관측 이력. IOC를 언제·어디서(호스트) 봤나 — 소스·호스트별 집계 + 시계열 타임라인. 점수/등급 비노출. ti:read.
Query parameters
valuestringrequired
조회할 indicator(IP/도메인/해시/CVE 등)
limitinteger
타임라인 최대 행(1..500)
Responses
200 summary[](source·host·ip·observations·first_seen·last_seen) + timeline[](finding_uid·axis·observed_at·evidence)400 value 누락401 인증 실패
cURLcurl -X GET https://scti.in-bridge.com/api/ti/sightings?value=string&limit=0 \
-H "Authorization: Bearer $TOKEN"
JavaScriptconst res = await fetch("https://scti.in-bridge.com/api/ti/sightings", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const data = await res.json();