본 문서는 영어 원본을 기계 번역한 것입니다. 번역본과 영어 원본 사이에 내용이 상충할 경우 영어 원본이 우선합니다. 영어 원본 보기


공개 API

Caiioo는 에이전트 실행, 도구 관리, 작업 예약 등 모든 기능을 프로그래밍 방식으로 제어할 수 있는 REST API를 제공합니다. 이 API는 데스크톱 앱과 브라우저 브리지를 구동하는 동일한 로컬 서버에서 작동합니다.

기본 URL: http://localhost:3847/v1

인증: 두 가지 인증 방식이 있으며, 두 방식 모두 설정의 API 토글을 통해 활성화해야 합니다.

외부 사용자용 (스크립트, 통합, curl): 설정 > API 액세스에서 API 액세스 토큰을 설정한 후, Bearer 토큰으로 사용하세요:

curl -H "Authorization: Bearer YOUR_API_TOKEN" http://localhost:3847/v1/providers

로컬 앱용 (자동): Caiioo 데스크톱 앱, 브라우저 확장 프로그램 및 모바일 앱은 기존 릴레이 인증 헤더(X-Relay-Auth)를 통해 자동으로 인증됩니다. 별도의 수동 설정이 필요 없으며, 앱이 백그라운드에서 이를 처리합니다.

설정 방법:

  1. Caiioo 설정 > API 액세스를 엽니다.
  2. 공개 API 활성화 토글을 켭니다.
  3. API 액세스 토큰을 설정합니다 (원하는 문자열을 입력하되, 비밀번호처럼 관리하세요).
  4. 모든 API 요청에 해당 토큰을 사용합니다.

API는 로컬 호스트 및 프라이빗 릴레이를 통해 사용할 수 있습니다. 현재 상태 및 설정 지침은 GET /v1/auth/info(인증 불필요)에서 확인하세요.

제공업체 및 모델

구성된 LLM 제공업체와 사용 가능한 모델을 확인합니다.

제공업체 목록:

GET /v1/providers

구성된 모든 제공업체 유형(Anthropic, OpenAI, Google, OpenRouter, Ollama, Poe, MLX, Baseten 등)을 기능 플래그(supportsVision, supportsToolCalling, supportsStreaming 등) 및 API 키 구성 여부와 함께 반환합니다.

제공업체별 모델 목록:

GET /v1/providers/anthropic/models

해당 제공업체의 모델 카탈로그를 반환합니다. 각 모델에는 id, displayName 및 사용 가능한 경우 contextLength가 포함됩니다.

전체 모델 통합 카탈로그:

GET /v1/models

구성된 모든 제공업체의 모델을 하나의 목록으로 병합합니다. API 키가 없는 제공업체는 건너뛰고 warnings에 나열됩니다.

에이전트

에이전트는 Caiioo의 핵심입니다. 각 에이전트는 하나의 모드이며, 자체 시스템 프롬프트, 도구, 변수 및 스킬을 가진 구성된 페르소나입니다.

모든 에이전트 목록:

GET /v1/agents

기본 제공 에이전트(쇼핑, 업무, 일반)와 직접 만든 커스텀 에이전트를 반환합니다. 각 에이전트에는 source: \"builtin\" 또는 source: \"custom\" 태그가 붙습니다.

커스텀 에이전트 생성:

POST /v1/agents
Content-Type: application/json

{
  \"id\": \"my-research-agent\",
  \"branding\": {
    \"name\": \"리서치 에이전트\",
    \"description\": \"웹을 검색하고 결과를 요약합니다\"
  },
  \"defaultSettings\": {
    \"systemPrompt\": \"당신은 리서치 어시스턴트입니다. 항상 출처를 인용하세요.\",
    \"enabledTools\": { \"web_browsing\": true, \"search_tools\": true }
  },
  \"settingLevels\": {}
}

생성된 에이전트와 함께 201을 반환합니다. 동기화를 위해 벡터 클락이 자동으로 첨부됩니다.

에이전트 업데이트:

PATCH /v1/agents/my-research-agent
Content-Type: application/json

{ \"branding\": { \"name\": \"리서치 에이전트\", \"description\": \"업데이트된 설명\" } }

기존 에이전트에 패치를 병합하고 벡터 클락을 올립니다. 기본 제공 에이전트는 403을 반환합니다(읽기 전용).

에이전트 삭제:

DELETE /v1/agents/my-research-agent

톰스톤을 통해 소프트 삭제됩니다(기기 간 동기화됨). 204를 반환합니다.

에이전트 실행

이것은 핵심 기능입니다 — 메시지를 처리하기 위해 에이전트를 호출합니다.

동기 모드 (Synchronous Mode)

전체 응답이 올 때까지 기다립니다:

POST /v1/runs
Content-Type: application/json

{
  "agentId": "general",
  "input": { "message": "오늘 파리 날씨는 어때?" },
  "mode": "sync"
}

에이전트가 완료되면 { content, usage, status: "completed" }와 함께 200을 반환합니다. 에이전트 오류 발생 시 { error, status: "error" }와 함께 500을 반환합니다.

비동기 모드 (Asynchronous Mode)

실행 후 즉시 반환 — 시간이 오래 걸리는 작업에 유용합니다:

POST /v1/runs
Content-Type: application/json

{
  "agentId": "my-research-agent",
  "input": { "message": "재생 에너지 트렌드에 대한 2000단어 분석 보고서를 작성해줘" },
  "mode": "async"
}

즉시 { runId, threadId, status: "running" }와 함께 202를 반환합니다.

상태 폴링:

GET /v1/runs/{runId}

{ run: { runId, threadId, agentId, status, createdAt, content?, usage?, error? } }를 반환합니다. 상태는 running, completed, error, cancelled 중 하나입니다.

실시간 이벤트 스트리밍 (SSE):

GET /v1/runs/{runId}/events

GENERATION_STARTED, STREAMING_CONTENT, 도구 호출, 서브 에이전트 활동 및 최종 이벤트(GENERATION_COMPLETE, GENERATION_ERROR, GENERATION_CANCELLED) 등 모든 에이전트 이벤트를 발생 즉시 text/event-stream으로 반환합니다. 스트림은 최종 이벤트 이후 종료됩니다.

실행 취소:

POST /v1/runs/{runId}/cancel

{ run: { ..., status: "cancelled" } }를 반환합니다.

Threads

Threads는 대화입니다. 모든 에이전트 실행은 Thread 내에서 발생하며, Thread는 세션 간에 유지됩니다. API를 통해 프로그래밍 방식으로 Thread를 나열, 읽기, 생성 및 관리할 수 있습니다.

모든 Thread 나열 (메타데이터만):

GET /v1/threads

성능을 위해 메시지가 제외된 현재 프로필의 Thread들을 반환합니다. 각 Thread에는 id, title, createdAt, updatedAt, modeId, archived 및 사용 통계가 포함됩니다.

전체 메시지가 포함된 Thread 가져오기:

GET /v1/threads/{id}

messages 배열(모든 사용자 메시지, 어시스턴트 응답, 도구 호출 및 도구 결과)을 포함한 전체 Thread를 반환합니다.

메시지만 가져오기:

GET /v1/threads/{id}/messages

messages 배열만 반환합니다. 대화 내용만 필요할 때 전체 Thread 객체보다 가볍게 사용할 수 있습니다.

Thread 생성:

POST /v1/threads
Content-Type: application/json

{ "title": "Research project", "modeId": "general" }

새 Thread와 함께 201을 반환합니다. 기본적으로 API는 앱의 활성 Thread를 전환하지 않습니다. 전환을 원할 경우 본문에 "setActive": true를 전달하십시오. 새 Thread는 즉시 사이드바에 표시됩니다(WebSocket 브로드캐스트를 통해).

Thread 업데이트:

PATCH /v1/threads/{id}
Content-Type: application/json

{ "title": "Renamed project", "archived": true }

업데이트 가능한 필드: title, modeId, archived, lastUsedModel. 변경 사항은 실시간으로 사이드바에 브로드캐스트됩니다.

Thread 삭제:

DELETE /v1/threads/{id}

Thread를 소프트 삭제(동기화를 위한 tombstone 처리)합니다. 204를 반환합니다. 삭제된 Thread는 휴지통으로 이동하며 휴지통을 비우기 전까지 복구할 수 있습니다.

활성 Thread:

GET /v1/threads/active            # { threadId } 반환
PUT /v1/threads/active            # 본문: { "threadId": "..." }

휴지통 관리:

GET /v1/threads/trash/count       # { count } 반환
POST /v1/threads/trash/empty      # { deletedCount, protectedCount } 반환

보호된 Thread(데이터 보존 토글을 통해 유지됨)는 휴지통 비우기에서 제외됩니다.

API를 통한 대화 이어가기: 기존 Thread에 후속 메시지를 보내려면 Thread ID와 함께 POST /v1/runs를 사용하십시오:

POST /v1/runs
Content-Type: application/json

{
  "agentId": "general",
  "threadId": "existing-thread-id",
  "input": { "message": "Follow up on that last point" },
  "mode": "sync"
}

에이전트는 Thread의 전체 대화 기록을 참조합니다.

첨부 파일

첨부 파일은 스레드에 연결된 파일(스크린샷, PDF, 문서, 업로드된 이미지, 생성된 아티팩트 등)입니다. API를 통해 이를 나열, 업로드, 다운로드 및 관리할 수 있습니다.

모든 첨부 파일 목록 조회 (메타데이터만):

GET /v1/attachments

현재 프로필의 첨부 파일 메타데이터를 반환합니다. 용량이 큰 필드(dataUrl, extractedContent, extractedImages)는 제외되므로, 해당 데이터가 필요한 경우 상세 또는 콘텐츠 엔드포인트를 사용하세요.

특정 스레드의 첨부 파일 목록 조회:

GET /v1/threads/{threadId}/attachments

첨부 파일 메타데이터 조회:

GET /v1/attachments/{id}

extractedContent(OCR 텍스트, 파싱된 마크다운), contentType, fileName, sizehasContent 플래그를 포함한 전체 메타데이터를 반환합니다. 원본 바이너리는 포함되지 않으며 /content 엔드포인트를 사용하세요.

첨부 파일 바이너리 다운로드:

GET /v1/attachments/{id}/content

올바른 Content-TypeContent-Disposition 헤더와 함께 원본 파일을 반환합니다. 다음과 같이 파일로 저장할 수 있습니다:

curl -o output.pdf \
  -H "Authorization: Bearer $API_TOKEN" \
  http://localhost:3847/v1/attachments/{id}/content

첨부 파일 업로드:

POST /v1/attachments
Content-Type: application/json

{
  "threadId": "thread-id",
  "type": "user_upload",
  "contentType": "application/pdf",
  "fileName": "report.pdf",
  "description": "분기별 보고서",
  "dataUrl": "data:application/pdf;base64,JVBERi0xLjQ..."
}

dataUrl은 base64로 인코딩된 데이터 URL입니다. 새로운 첨부 파일 ID와 함께 201을 반환합니다. 첨부 파일은 지정된 스레드에 연결됩니다.

첨부 파일 메타데이터 업데이트:

PATCH /v1/attachments/{id}
Content-Type: application/json

{ "description": "업데이트된 설명", "fileName": "new-name.pdf" }

첨부 파일 삭제:

DELETE /v1/attachments/{id}

툼스톤을 통해 소프트 삭제합니다. 204를 반환합니다.

MCP Servers

에이전트에게 외부 도구 및 데이터 소스에 대한 접근 권한을 부여하는 MCP (Model Context Protocol) 서버 연결을 관리합니다.

구성된 서버 목록 조회:

GET /v1/mcp-servers

현재 프로필의 모든 MCP 서버 구성을 반환합니다. 민감한 필드(authToken, env, credentialId)는 응답에서 제외됩니다.

서버 구성 조회:

GET /v1/mcp-servers/{id}

새 MCP 서버 추가:

POST /v1/mcp-servers
Content-Type: application/json

{
  "id": "my-server",
  "name": "My MCP Server",
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/files"],
  "serverType": "local"
}

원격 HTTP 서버의 경우 "command" 대신 "url"을 사용하세요:

{
  "id": "remote-server",
  "name": "Remote API",
  "url": "https://my-mcp-server.example.com/sse",
  "serverType": "remote"
}

서버 업데이트:

PATCH /v1/mcp-servers/{id}
Content-Type: application/json

{ "name": "Renamed Server", "args": ["-y", "@mcp/server-v2"] }

서버 활성화/비활성화:

POST /v1/mcp-servers/{id}/toggle
Content-Type: application/json

{ "enabled": false }

서버 삭제:

DELETE /v1/mcp-servers/{id}

Process Management

로컬 (stdio) MCP 서버의 경우, 서버 프로세스를 직접 관리할 수 있습니다.

실행 중인 프로세스 목록 조회:

GET /v1/mcp-servers/processes

pid, startedAt, running 상태를 포함하여 실행 중인 서버 프로세스를 반환합니다.

서버 시작:

POST /v1/mcp-servers/{id}/start

서버 구성에서 command/args/env를 읽어 프로세스를 생성합니다. 프로세스 상태를 반환합니다.

서버 중지:

POST /v1/mcp-servers/{id}/stop

서버 프로세스를 정상적으로 종료합니다 (SIGTERM 후 실패 시 SIGKILL 사용).

JSON-RPC 메서드 직접 호출:

POST /v1/mcp-servers/{id}/call
Content-Type: application/json

{ "method": "tools/list", "params": {} }

서버에 원시 JSON-RPC 2.0 요청을 보내고 결과를 반환합니다. 디버깅이나 도구 API를 통해 노출되지 않은 메서드를 호출할 때 유용합니다.

도구 및 툴킷

웹 브라우징, 검색, 캘린더, Gmail, Slate 등 에이전트가 사용하는 도구를 탐색하고 호출합니다.

툴킷 목록 조회 (그룹화):

GET /v1/toolkits

카테고리별(생산성, 검색, 유틸리티 등)로 그룹화된 내장 도구와 연결된 MCP 서버를 별도의 툴킷으로 반환하며, 각 액션 목록을 포함합니다.

모든 도구 목록 조회 (평면):

GET /v1/tools
GET /v1/tools?source=embedded   # 내장 도구만
GET /v1/tools?source=mcp        # MCP 서버 도구만

입력 스키마를 포함한 도구 상세 정보:

GET /v1/tools/calculator

도구의 입력 매개변수에 대한 JSON Schema를 반환하여 호출 전 유효성을 검사할 수 있습니다.

도구 직접 호출:

POST /v1/tools/calculator/invoke
Content-Type: application/json

{ "input": { "expression": "sqrt(144) + 3^2" } }

{ result }를 반환합니다. 입력값은 도구 스키마에 따라 검증되며, 유효하지 않은 경우 상세 내용과 함께 422를 반환합니다. 원격 MCP 도구는 에이전트 서브프로세스 전송이 필요하므로 /v1/runs를 사용하라는 안내와 함께 501을 반환합니다.

커넥터

Google, Microsoft, GitHub, Notion, Slack 등 OAuth 통합을 관리합니다.

사용 가능한 통합 탐색:

GET /v1/connectors/catalog

등록된 모든 OAuth 제공자의 이름, 카테고리 및 기본 스코프를 반환합니다.

연결된 계정 목록 조회:

GET /v1/connectors

현재 프로필의 활성 연결을 반환합니다. 토큰은 절대 노출되지 않으며 메타데이터(제공자, 이메일, 상태, 스코프, 타임스탬프)만 제공됩니다.

연결 상태 확인:

POST /v1/connectors/{id}/test

{ health: { status, isTokenExpired, canRefresh } }를 반환합니다.

연결 제거:

DELETE /v1/connectors/{id}

새 연결을 생성하려면 앱 UI 또는 /auth/* 경로를 통한 대화형 OAuth 흐름이 필요합니다.

트리거

일일 브리핑, 주간 보고서, 간격 기반 모니터링 등 에이전트가 자동으로 실행되도록 예약합니다.

트리거 목록 조회:

GET /v1/triggers

예약된 트리거 생성:

POST /v1/triggers
Content-Type: application/json

{
  "name": "아침 브리핑",
  "prompt": "읽지 않은 이메일과 오늘 일정을 요약해줘",
  "modeId": "general",
  "schedule": { "type": "daily", "time": "08:00" }
}

지원되는 일정 유형:

  • { "type": "interval", "minutes": 60 } — N분마다 (최소 15, 최대 1440)
  • { "type": "daily", "time": "09:00" } — 매일 특정 시간
  • { "type": "weekly", "day": "mon", "time": "09:00" } — 매주
  • { "type": "weekdays", "time": "08:30" } — 월요일부터 금요일까지
  • { "type": "daysOfWeek", "days": ["mon", "wed", "fri"], "time": "10:00" } — 특정 요일
  • { "type": "monthly", "dayOfMonth": 1, "time": "09:00" } — 매월
  • { "type": "manual" } — API를 통해 실행할 때만

트리거 수동 실행:

POST /v1/triggers/{id}/fire

결과 실행에 대한 threadId와 함께 202를 반환합니다.

업데이트 또는 삭제:

PATCH /v1/triggers/{id}
DELETE /v1/triggers/{id}

웹훅

웹훅 트리거를 사용하면 외부 서비스(CI/CD, 모니터링, 폼 빌더)가 HTTP를 통해 에이전트 실행을 트리거할 수 있습니다.

웹훅 트리거 생성:

POST /v1/triggers
Content-Type: application/json

{
  "name": "배포 훅",
  "prompt": "배포가 발생했습니다: {{webhook.body}}",
  "modeId": "general",
  "kind": "webhook"
}

webhookSecretwebhookPath와 함께 201을 반환합니다. 페이로드 서명에 필요하므로 비밀 키를 안전하게 보관하세요.

웹훅 전송:

# 원본 요청 본문의 HMAC-SHA256 계산
SIGNATURE=$(echo -n '{"repo":"my-app","branch":"main"}' | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET" | awk '{print $2}')

POST /v1/webhooks/{triggerId}
Content-Type: application/json
X-Webhook-Signature: $SIGNATURE

{"repo": "my-app", "branch": "main"}

웹훅 엔드포인트는 Bearer 인증이 필요하지 않으며 대신 HMAC 검증을 사용합니다. 디스패치된 실행의 threadId와 함께 202를 반환합니다. 트리거 프롬프트의 {{webhook.body}} 자리표시자는 원본 요청 본문으로 대체됩니다.

커스텀 함수

에이전트가 호출할 수 있는 고유한 도구를 만듭니다. 함수는 JavaScript 또는 Python으로 작성되며 샌드박스에서 실행됩니다.

함수 목록 조회:

GET /v1/functions

함수 생성:

POST /v1/functions
Content-Type: application/json

{
  "name": "calculate_bmi",
  "description": "키와 몸무게로 체질량 지수(BMI) 계산",
  "language": "javascript",
  "source": "return { bmi: (input.weightKg / (input.heightM * input.heightM)).toFixed(1) };",
  "inputSchema": {
    "type": "object",
    "properties": {
      "weightKg": { "type": "number" },
      "heightM": { "type": "number" }
    },
    "required": ["weightKg", "heightM"]
  }
}

JavaScript 함수는 input을 받아 결과를 반환해야 합니다. Python 함수는 result 변수를 설정합니다:

# Python 예시
result = {"bmi": round(input["weightKg"] / (input["heightM"] ** 2), 1)}

함수 직접 실행:

POST /v1/functions/{id}/execute
Content-Type: application/json

{ "input": { "weightKg": 75, "heightM": 1.80 } }

보안: JavaScript는 Node의 vm 샌드박스에서 실행됩니다(파일 시스템 또는 네트워크 액세스 불가, 10초 타임아웃). Python은 30초 타임아웃이 있는 서브프로세스로 실행됩니다. 둘 다 실행 전 입력을 검증합니다.

업데이트 또는 삭제:

PATCH /v1/functions/{id}
DELETE /v1/functions/{id}

워크플로우

여러 에이전트를 DAG(방향성 비순환 그래프)로 오케스트레이션합니다. 가능한 경우 단계를 병렬로 실행하고, 이전 단계의 출력을 다음 단계의 입력으로 전달합니다.

워크플로우 그래프 검증:

POST /v1/workflows/validate
Content-Type: application/json

{
  "graph": {
    "nodes": [
      { "id": "research", "agentId": "general", "prompt": "재생 에너지 트렌드 조사" },
      { "id": "analyze", "agentId": "general", "prompt": "경쟁사 가격 조사" },
      { "id": "report", "agentId": "general", "prompt": "다음 내용을 결합하여 보고서 작성: {{outputs.research}} 및 {{outputs.analyze}}", "dependsOn": ["research", "analyze"] }
    ]
  }
}

{ valid: true/false, errors: [...] }를 반환합니다. 순환 참조, 중복 ID 및 누락된 종속성 참조를 확인합니다.

워크플로우 실행:

POST /v1/workflows/execute
Content-Type: application/json

{
  "graph": {
    "nodes": [
      { "id": "research", "agentId": "general", "prompt": "재생 에너지 트렌드 조사" },
      { "id": "summarize", "agentId": "general", "prompt": "요약: {{outputs.research}}", "dependsOn": ["research"] }
    ]
  }
}

{ status: "completed", outputs: { research: "...", summarize: "..." }, nodeResults: {...} }를 반환합니다.

독립적인 노드(공유 종속성 없음)는 병렬로 실행됩니다. 노드 프롬프트의 {{outputs.nodeId}} 자리표시자는 지정된 상류 노드의 콘텐츠 출력으로 대체됩니다. 각 노드는 전체 에이전트 실행이므로 도구 사용, 웹 브라우징 및 대상 에이전트의 모든 기능을 사용할 수 있습니다.

지식 베이스

문서를 에이전트가 참조할 수 있는 검색 가능한 컬렉션으로 구성합니다.

지식 베이스 목록 조회:

GET /v1/knowledge/bases

지식 베이스 생성:

POST /v1/knowledge/bases
Content-Type: application/json

{ "name": "연구 논문" }

새로운 베이스 ID와 함께 201을 반환합니다.

지식 베이스에 문서 업로드:

POST /v1/knowledge/bases/{id}/documents
Content-Type: application/json

{
  "fileName": "research-paper.pdf",
  "contentType": "application/pdf",
  "dataUrl": "data:application/pdf;base64,JVBERi0xLjQ...",
  "description": "2026년 재생 에너지 트렌드"
}

dataUrl 필드는 base64로 인코딩된 데이터 URL입니다. 문서 메타데이터와 함께 201을 반환합니다.

지식 베이스 내 문서 목록 조회:

GET /v1/knowledge/bases/{id}/documents

지식 베이스 내 검색:

POST /v1/knowledge/bases/{id}/search
Content-Type: application/json

{ "query": "재생 에너지" }

파일 이름과 설명을 기반으로 일치하는 문서를 반환합니다. 시맨틱(벡터) 검색은 향후 릴리스에서 제공될 예정입니다.

문서 또는 지식 베이스 삭제:

DELETE /v1/knowledge/bases/{id}/documents/{docId}
DELETE /v1/knowledge/bases/{id}

에이전트 내보내기 및 가져오기

에이전트를 기기, 팀 또는 커뮤니티 허브 간에 이동 가능한 패키지로 공유하세요.

에이전트 내보내기:

POST /v1/agents/{id}/export

에이전트 정의, 도구 요구 사항, 커넥터 요구 사항 및 트리거 템플릿이 포함된 JSON 패키지를 반환합니다. 동기화 메타데이터는 제거되어 깨끗하고 독립적인 청사진이 됩니다.

에이전트 가져오기:

POST /v1/agents/import
Content-Type: application/json

{
  \"package\": {
    \"$schema\": \"caiioo.agent.package/v1\",
    \"agent\": {
      \"id\": \"shared-research-agent\",
      \"branding\": { \"name\": \"리서치 에이전트\", \"description\": \"팀에서 공유함\" },
      \"defaultSettings\": { \"systemPrompt\": \"당신은 리서치를 수행합니다.\" },
      \"settingLevels\": {}
    },
    \"toolRequirements\": [
      { \"toolId\": \"web_browsing\", \"enabled\": true },
      { \"toolId\": \"search_tools\", \"enabled\": true }
    ]
  }
}

설치된 에이전트와 함께 201을 반환합니다. 기본 제공 또는 기존 에이전트와 ID가 충돌하면 409를 반환합니다.

오류 처리

API는 표준 HTTP 상태 코드를 사용합니다.

코드 의미
200 성공
201 생성됨
202 수락됨 (비동기 작업 시작됨)
204 삭제됨 (콘텐츠 없음)
400 잘못된 요청 — error 필드에서 상세 내용 확인
401 인증되지 않음 — 세션 비밀 키 누락 또는 유효하지 않음
403 금지됨 — 예: 기본 제공 에이전트 수정 시도
404 찾을 수 없음
409 충돌 — 예: 에이전트 ID가 이미 존재함
422 유효성 검사 오류 — 입력이 도구 스키마와 일치하지 않음
500 서버 오류 — error 필드 확인
501 구현되지 않음 — 기능은 존재하나 이 방식으로는 사용 불가
503 서비스 사용 불가 — 저장소 또는 제공자가 준비되지 않음

모든 오류 응답에는 { "error": "사람이 읽을 수 있는 메시지" }가 포함됩니다.

빠른 시작 예시

에이전트를 생성하고 실행한 뒤 결과를 스트리밍하는 전체 워크플로우입니다.

# 1. 커스텀 에이전트 생성
curl -X POST http://localhost:3847/v1/agents \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "quick-summarizer",
    "branding": { "name": "Quick Summarizer" },
    "defaultSettings": {
      "systemPrompt": "모든 입력을 3개의 불렛 포인트로 간결하게 요약하세요.",
      "enabledTools": { "web_browsing": true }
    },
    "settingLevels": {}
  }'

# 2. 비동기로 실행
RUN=$(curl -s -X POST http://localhost:3847/v1/runs \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "agentId": "quick-summarizer", "input": { "message": "https://ko.wikipedia.org/wiki/인공지능 요약해줘" }, "mode": "async" }')

RUN_ID=$(echo $RUN | jq -r '.runId')

# 3. 이벤트 스트리밍
curl -N http://localhost:3847/v1/runs/$RUN_ID/events \
  -H "Authorization: Bearer $API_TOKEN"

# 4. 공유를 위해 에이전트 내보내기
curl -X POST http://localhost:3847/v1/agents/quick-summarizer/export \
  -H "Authorization: Bearer $API_TOKEN"

This guide is maintained by the Caiioo team using Slate, our built-in editor.