external

Sentivex Incidents Ticket API

POST/api/external/ingest/sxe

SXE SOC analyzer 인시던트 수신 (staging).

POST /api/external/ingest/sxe — SXE SOC analyzer 인시던트 수신 (staging). 인증: Authorization: Bearer ${SXE_INGEST_SECRET}. (proxy.ts 쿠키 게이트 제외 — /api/external/) 미설정 시 비활성. 테넌트별 API key 는 후속 하드닝. 멱등: external_ref 기준 upsert. G4: 미완(running/stalled) 분석도 수신(silent drop 금지). docs/integrations/08·09.

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/external/ingest/sxe \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/external/ingest/sxe", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
GET/api/external/sxe/ingest-status

status?analysisId=123

GET /api/external/sxe/ingest-status?analysisId=123 SXE 측 라이브 E2E가 analysis_id 단위로 index-pm 도착 여부를 확인하는 읽기 전용 훅. 인증은 SXE 인입 API와 동일한 Bearer secret을 사용한다. @author jijuta ([email protected]) @since 2026-06-12

Responses

200 성공401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X GET https://sit.in-bridge.com/api/external/sxe/ingest-status \
  -H "Authorization: Bearer $TOKEN"
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/external/sxe/ingest-status", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${token}`
  }
});
const data = await res.json();
POST/api/external/sxe/pipeline-event

랭그래프 워커 노드 진행을 SSE 로 실시간 fan-out (관측성 #208).

POST /api/external/sxe/pipeline-event — 랭그래프 워커 노드 진행을 SSE 로 실시간 fan-out (관측성 #208). 목적(왜): 워커(Python)는 Redis 발행이 없어 노드 진행(classify→retrieve→propose→…)이 실시간으로 안 보였다("분석하는게 실시간 업데이트 안됨" — 사용자 지적). 워커의 record_trace 가 각 노드마다 이 엔드포인트로 이벤트를 쏘면, sit 이 프로젝트 채널(인시던트 상세뷰) + 수신자 /me 채널(라이브 모니터)로 `pipeline.node` 이벤트를 발행해 실시간 반영한다. 인증: Authorization: Bearer ${SXE_INGEST_SECRET} (다른 external/* 와 동일). best-effort — 워커는 실패해도 처리를 계속한다(관측용). 프로젝트 미존재 시 200(구독기/워커 재시도 방지).

Request body

incidentKeystringrequired
projectIdstring<uuid>required
nodestringrequired
seqinteger
statusstring
summarystring

Responses

200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/external/sxe/pipeline-event \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"incidentKey":"string","projectId":"00000000-0000-0000-0000-000000000000","node":"string","seq":0,"status":"string","summary":"string"}'
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/external/sxe/pipeline-event", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "incidentKey": "string",
    "projectId": "00000000-0000-0000-0000-000000000000",
    "node": "string",
    "seq": 0,
    "status": "string",
    "summary": "string"
  })
});
const data = await res.json();
POST/api/external/sxe/progress

SXE 분석 라이프사이클 진행 신호(시작/완료) 수신.

POST /api/external/sxe/progress — SXE 분석 라이프사이클 진행 신호(시작/완료) 수신. ingest(/api/external/ingest/sxe)가 "티켓 발행"(영속 알림)을 담당한다면, 이 엔드포인트는 그 전후의 일시적 진행 토스트를 담당한다: - stage="started" → "🔍 분석 시작" 토스트 - stage="completed" → "✅ 분석 완료 · verdict/severity" 토스트 (benign 이라 티켓이 안 나오는 분석도 완료 사실은 알린다 — 사용자 요청) DB 알림 행을 만들지 않는다(분석마다 inbox 도배 방지). publishUserEvent 로 해당 프로젝트 멤버 중 notify_incidents=true 인 사용자에게 type:"analysis.progress" 이벤트만 fan-out → 사이드바가 토스트로 표시. 인증: Authorization: Bearer ${SXE_INGEST_SECRET} (ingest 와 동일). proxy.ts 쿠키 게이트 제외.

Request body

projectIdstring<uuid>required
stageenumrequired
startedcompleted
uidstring
verdictstring
severitystring
analysisIdstring

Responses

200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/external/sxe/progress \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"00000000-0000-0000-0000-000000000000","stage":"started","uid":"string","verdict":"string","severity":"string","analysisId":"string"}'
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/external/sxe/progress", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "projectId": "00000000-0000-0000-0000-000000000000",
    "stage": "started",
    "uid": "string",
    "verdict": "string",
    "severity": "string",
    "analysisId": "string"
  })
});
const data = await res.json();
POST/api/external/sxe/resolve-project

SXE 분석 source/vendor 를 수신 프로젝트로 해석.

POST /api/external/sxe/resolve-project — SXE 분석 source/vendor 를 수신 프로젝트로 해석. 구독기(`scripts/sxe-ws-subscribe.mjs`)가 SXE source/vendor/tenantRef 를 보내면 `incident_subscriptions` 기준으로 projectId 를 반환한다(#155). SXE 소스는 수정하지 않고, index-pm 이 PULL 구독 중에 자기 DB 구독 모델을 조회한다. 인증: Authorization: Bearer ${SXE_INGEST_SECRET} @author jijuta ([email protected]) @since 2026-06-12 @updated 2026-06-12 — #155 external resolve API 신설

Request body

sourcestring
vendorstring
tenantRefstring
fallbackProjectIdstring<uuid>

Responses

200 성공400 입력 검증 실패(zod)401 미인증(JWT 쿠키 필요)403 권한 없음404 없음
cURL
curl -X POST https://sit.in-bridge.com/api/external/sxe/resolve-project \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"source":"string","vendor":"string","tenantRef":"string","fallbackProjectId":"00000000-0000-0000-0000-000000000000"}'
JavaScript
const res = await fetch("https://sit.in-bridge.com/api/external/sxe/resolve-project", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "source": "string",
    "vendor": "string",
    "tenantRef": "string",
    "fallbackProjectId": "00000000-0000-0000-0000-000000000000"
  })
});
const data = await res.json();