엔드포인트
OmniScout Cloud API 엔드포인트 레퍼런스.
기본 URL: https://api.omniscout.xyz (또는 배포 URL).
모든 응답에는 디버깅 및 지원을 위한 request_id (UUID)가 포함됩니다.
POST /v0/search
자체 인덱스에 대한 시맨틱 검색.
요청
{
"query": "rust async runtimes",
"limit": 10
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
query | string | 예 | 검색 쿼리 (1–500자) |
limit | integer | 아니요 | 최대 결과 수 (1–20, 기본값 10) |
응답
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"query": "rust async runtimes",
"count": 10,
"hits": [
{
"url": "https://tokio.rs/",
"title": "Tokio - An asynchronous Rust runtime",
"snippet": "...",
"source": "common_crawl",
"score": 0.94,
"rank": 1
}
]
}파이프라인
- Qdrant Cloud에 대한 하이브리드 벡터 + BM25 쿼리
omniscout.engines.search.rerank으로 리랭크- 점수가 포함된 상위 결과 반환
POST /v0/answer
웹 출처 기반 한 문장 답변.
요청
{
"query": "What is the latest stable Rust version?"
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
query | string | 예 | 질문 (1–500자) |
응답
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"query": "What is the latest stable Rust version?",
"answer": "Rust 1.85.0 is the latest stable release as of February 2025.",
"status": "answered",
"confidence": 0.87,
"sources": [
{ "url": "https://blog.rust-lang.org/", "title": "Rust Blog" }
]
}근거가 부족하면 status는 insufficient_information이고 answer는 null입니다.
파이프라인
- 상위 3개 인덱스 검색 + 리랭크
- URL 콘텐츠 추출 (omniscout 또는 trafilatura)
- Vercel AI Gateway로 합성
- 출처와 신뢰도가 포함된 답변 반환
세션 API 요약
POST /v0/search와 POST /v0/answer는 변경되지 않았습니다. 세션 엔드포인트는 동일한 URL 경로를 사용하지만, 호출자는 다음 사항에 유의해야 합니다:
| 주제 | 이전 | 현재 |
|---|---|---|
| 생성 응답 | session_id, expires_at | session_secret(저장 필요)과 capabilities도 포함 |
| 명령어 인증 | API 키 + x-session-secret | 동일 — 명시적으로 문서화; 시크릿은 생성 시에만 표시 |
| 컴퓨터 + 브라우저 | 별도 세션 / VM | 컴퓨터 세션 ID가 두 경로 모두에서 동작 |
| 브라우저 액션 | navigate, screenshot, … | 변경 없음 (기본 액션 이름) |
| 컴퓨터 액션 | computer.* 접두사 | 변경 없음 |
| 스크린샷 / 파일 | Sprite상의 경로만 | 바이트 다운로드는 GET /v0/sessions/{id}/files 사용 |
| 브라우저에 업로드 | Sprite상의 경로만 | 먼저 POST /v0/sessions/{id}/files 후 upload 액션 |
| 만료 | 생성 시점 기준 고정 TTL | 비활성 기반 슬라이딩 (기본 30분), 최대 2시간 |
| 세션 삭제 | API 키 | API 키만 (x-session-secret 불필요) |
브라우저 세션
POST /v0/browser/sessions
브라우저 전용 Fly Sprite 세션 생성 (경량 Chromium VM).
인증: Authorization: Bearer os_live_...
{
"request_id": "...",
"session_id": "j57abc...",
"type": "browser",
"capabilities": ["browser"],
"expires_at": 1710000000000,
"sprite_url": "https://omniscout-sprites.fly.dev",
"session_secret": "48-char-hex-secret-returned-once"
}세션은 비활성 상태(SESSION_INACTIVITY_MS, 기본 30분)가 지속되거나 하드 TTL(SESSION_MAX_TTL_MS, 기본 2시간)에 도달하면 만료됩니다. 각 명령어마다 비활성 기간이 연장됩니다.
POST /v0/browser/sessions/{id}
데몬 명령어를 세션에 프록시.
헤더: Authorization: Bearer os_live_... 및 x-session-secret: <생성 시 받은 시크릿>
{
"action": "navigate",
"args": { "url": "https://example.com" },
"session": "default"
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
action | string | 예 | 브라우저 액션 이름 (예: navigate, snapshot, screenshot) — browser. 접두사 없음 |
args | object | 아니요 | 액션별 인수 |
session | string | 아니요 | 데몬 탭 그룹 이름 (기본값 default) |
timeout_ms | integer | 아니요 | 명령어 제한 시간 (밀리초) |
capabilities: ["browser", "computer"]인 컴퓨터 세션도 같은 session_id를 사용해 이 경로에서 브라우저 명령어를 받습니다.
브라우저 전용 세션은 computer.* 액션을 400으로 거부합니다.
DELETE /v0/browser/sessions/{id}
세션을 삭제하고 Fly Machine을 해제.
헤더: Authorization: Bearer os_live_...만 (세션 시크릿 불필요).
컴퓨터 세션
통합 Fly Sprite 세션은 같은 VM에서 데스크톱 자동화와 브라우저 자동화를 모두 포함합니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
POST | /v0/computer/sessions | 통합 Sprite 생성 (capabilities: ["browser", "computer"]) |
POST | /v0/computer/sessions/{id} | 명령어 프록시 (computer.* 액션) |
DELETE | /v0/computer/sessions/{id} | 세션 삭제 (API 키만) |
명령어용 헤더: Authorization + x-session-secret (브라우저 명령어와 동일).
컴퓨터 명령어는 computer. 접두사를 사용합니다:
{
"action": "computer.type",
"args": { "text": "hello" },
"session": "default"
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
action | string | 예 | computer.로 시작해야 함 (예: computer.type, computer.screenshot) |
args | object | 아니요 | 액션별 인수 |
session | string | 아니요 | 데몬 세션 이름 (기본값 default) |
같은 session_id가 /v0/browser/sessions/{id}를 통한 브라우저 명령어에도 동작합니다 — 두 번째 브라우저 세션이 필요 없습니다.
세션 파일
Sprite 파일시스템의 파일을 업로드 및 다운로드.
| 메서드 | 경로 | 설명 |
|---|---|---|
POST | /v0/sessions/{id}/files | 멀티파트 업로드 (file 필드, 선택적 session 이름) |
GET | /v0/sessions/{id}/files?path=... | 파일 바이트 다운로드 |
GET | /v0/sessions/{id}/files?path=...&format=base64 | base64 페이로드가 포함된 JSON으로 다운로드 |
두 경로 모두 Authorization과 x-session-secret이 필요합니다.
업로드 — file 필드가 포함된 multipart/form-data. 선택적 session 필드는 데몬 세션 이름을 설정 (기본값 default).
curl -X POST "https://api.omniscout.xyz/v0/sessions/$SESSION_ID/files" \
-H "Authorization: Bearer $OMNISCOUT_API_KEY" \
-H "x-session-secret: $SESSION_SECRET" \
-F "file=@./document.pdf"다운로드 — 쿼리 매개변수 path (screenshot 같은 명령어 결과에서 확인):
curl "https://api.omniscout.xyz/v0/sessions/$SESSION_ID/files?path=/tmp/...&format=base64" \
-H "Authorization: Bearer $OMNISCOUT_API_KEY" \
-H "x-session-secret: $SESSION_SECRET"일반적인 스크린샷 워크플로:
{"action":"screenshot","args":{}}와 함께POST /v0/browser/sessions/{id}GET /v0/sessions/{id}/files?path={반환된_경로}&format=base64
일반적인 브라우저 업로드 워크플로:
- 파일 바이트와 함께
POST /v0/sessions/{id}/files {"action":"upload","args":{"selector":"@e1","files":["/path/from/step-1"]}}와 함께POST /v0/browser/sessions/{id}
OpenAPI
전체 OpenAPI 3.1 스펙은 다음에서 확인할 수 있습니다:
- 대화형 탐색기: api.omniscout.xyz/docs
- JSON: api.omniscout.xyz/api/openapi
스펙은 Zod 경로 스키마에서 생성되며 실시간 API와 동기화됩니다.