InfoGrab DocsInfoGrab Docs

플로우 API

요약

이 API를 사용하여 GitLab Duo Agent Platform에서 플로우를 생성하고 관리합니다. 성공 시 201 Created 및 다음 응답 속성을 반환합니다: ai_catalog_item_consumer_id를 사용하기 전에 GraphQL API를 사용하여 AI 카탈로그에서 ID를 조회해야 합니다.

이 API를 사용하여 GitLab Duo Agent Platform에서 플로우를 생성하고 관리합니다. 플로우는 버그 수정, 코드 작성, 취약점 해결과 같은 개발자 작업을 완료하기 위해 함께 작동하는 AI 에이전트의 조합입니다.

플로우 트리거#

새 플로우를 트리거하고 시작합니다.

POST /ai/duo_workflows/workflows

지원되는 속성:

속성 유형 필수 여부 설명
additional_context 객체 배열 아니요 플로우의 추가 컨텍스트. 각 요소는 최소한 Category (문자열) 및 Content (문자열, 직렬화된 JSON) 키를 포함하는 객체여야 합니다.
agent_privileges 정수 배열 아니요 에이전트가 사용할 수 있는 권한 ID. 기본값은 모든 권한입니다. 모든 에이전트 권한 나열을 참조하세요.
ai_catalog_item_consumer_id 정수 아니요 실행할 카탈로그 항목을 구성하는 AI 카탈로그 항목 소비자의 ID. project_id가 필요합니다. workflow_definition과 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다. 소비자 ID 조회를 참조하세요.
ai_catalog_item_version_id 정수 아니요 플로우 구성의 소스인 AI 카탈로그 항목 버전의 ID.
allow_agent_to_request_user 부울 아니요 true(기본값)이면 에이전트가 진행 전에 사용자에게 질문하기 위해 일시 중지할 수 있습니다. false이면 에이전트가 사용자 입력 없이 완료까지 실행됩니다.
environment 문자열 아니요 실행 환경. ide, web, chat_partial, chat, ambient 중 하나.
goal 문자열 아니요 에이전트가 완료해야 할 작업의 설명. 예: Fix the failing pipeline.
image 문자열 아니요 CI 파이프라인에서 플로우를 실행할 때 사용할 컨테이너 이미지. 사용자 정의 이미지 요구 사항을 충족해야 합니다. 예: registry.gitlab.com/gitlab-org/duo-workflow/custom-image:latest.
issue_id 정수 아니요 플로우와 연결할 이슈의 IID. project_id가 필요합니다.
merge_request_id 정수 아니요 플로우와 연결할 머지 리퀘스트의 IID. project_id가 필요합니다.
namespace_id 문자열 아니요 플로우와 연결할 네임스페이스의 ID 또는 경로.
pre_approved_agent_privileges 정수 배열 아니요 에이전트가 사용자 승인 없이 사용할 수 있는 권한 ID. agent_privileges의 하위 집합이어야 합니다.
project_id 문자열 아니요 플로우와 연결할 프로젝트의 ID 또는 경로.
shallow_clone 부울 아니요 실행 중 리포지터리의 얕은 복제를 사용할지 여부. 기본값: true.
source_branch 문자열 아니요 CI 파이프라인의 소스 브랜치. 기본값은 프로젝트의 기본 브랜치.
start_workflow 부울 아니요 true이면 생성 후 즉시 플로우를 시작합니다.
workflow_definition 문자열 아니요 플로우 유형 식별자. 예: developer/v1. ai_catalog_item_consumer_id와 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다.
source 문자열 아니요 UI에서 세션이 트리거된 위치.

성공 시 201 Created 및 다음 응답 속성을 반환합니다:

속성 유형 설명
agent_privileges 정수 배열 에이전트에 할당된 권한 ID.
agent_privileges_names 문자열 배열 agent_privileges에 대응하는 이름.
ai_catalog_item_version_id 정수 AI 카탈로그 항목 버전의 ID. 설정되지 않은 경우 null.
allow_agent_to_request_user 부울 true이면 에이전트가 사용자 입력을 위해 일시 중지할 수 있습니다.
environment 문자열 실행 환경. 설정되지 않은 경우 null.
gitlab_url 문자열 GitLab 인스턴스의 기본 URL.
id 정수 플로우의 ID.
image 문자열 CI 파이프라인 실행을 위한 컨테이너 이미지. 설정되지 않은 경우 null.
mcp_enabled 부울 이 플로우에 MCP(Model Context Protocol) 도구가 활성화되어 있는지 여부.
namespace_id 정수 연결된 네임스페이스의 ID. 설정되지 않은 경우 null.
pre_approved_agent_privileges 정수 배열 에이전트가 승인 없이 사용할 수 있는 권한 ID.
pre_approved_agent_privileges_names 문자열 배열 pre_approved_agent_privileges에 대응하는 이름.
project_id 정수 연결된 프로젝트의 ID. 설정되지 않은 경우 null.
status 문자열 현재 플로우 상태. created, running, paused, finished, failed, stopped, input_required, plan_approval_required 또는 tool_call_approval_required 중 하나.
summary 문자열 워크플로의 간단한 텍스트 요약.
title 문자열 세션 제목.
workflow_definition 문자열 플로우 유형 식별자.
workload 객체 워크로드에 대한 정보.
workload.id 문자열 워크로드의 ID.
workload.message 문자열 워크로드의 상태 메시지.

소비자 ID 조회#

ai_catalog_item_consumer_id를 사용하기 전에 GraphQL API를 사용하여 AI 카탈로그에서 ID를 조회해야 합니다. 항목이 이미 프로젝트에서 활성화되어 있어야 합니다.

query {
  aiCatalogConfiguredItems(projectId: "gid://gitlab/Project/<project_id>") {
    nodes {
      id
      item { name }
    }
  }
}

id 필드는 gid://gitlab/AiCatalogItemConsumer/<numeric_id> 형식의 전역 ID입니다. ai_catalog_item_consumer_id 값으로 숫자 접미사를 사용하세요.

기본 제공 플로우 유형을 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "workflow_definition": "developer/v1",
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

카탈로그 구성 플로우를 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "ai_catalog_item_consumer_id": 12,
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

응답 예시:

{
  "id": 1,
  "project_id": 5,
  "namespace_id": null,
  "agent_privileges": [1, 2, 3, 4, 5, 6],
  "agent_privileges_names": [
    "read_write_files",
    "read_only_gitlab",
    "read_write_gitlab",
    "run_commands",
    "use_git",
    "run_mcp_tools"
  ],
  "pre_approved_agent_privileges": [],
  "pre_approved_agent_privileges_names": [],
  "workflow_definition": "developer/v1",
  "status": "running",
  "allow_agent_to_request_user": true,
  "image": null,
  "environment": null,
  "ai_catalog_item_version_id": null,
  "workload": {
    "id": "abc-123",
    "message": "Workflow started"
  },
  "mcp_enabled": false,
  "gitlab_url": "https://gitlab.example.com"
}

플로우 콜백 엔드포인트 등록#

플로우 수명 주기 이벤트(flow.started, flow.completed, flow.failed)를 수신하는 HTTPS 엔드포인트를 등록합니다. 플로우를 트리거할 때 반환된 idcallback_hook_id 속성으로 참조하면 상태를 폴링하는 대신 수명 주기 알림을 받을 수 있습니다.

URL과 시크릿은 저장 시 암호화되며, 등록 후에는 API가 절대 반환하지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
POST /ai/duo_workflows/flow_callbacks

지원되는 속성:

속성 유형 필수 여부 설명
url 문자열 콜백을 수신하는 HTTPS URL.
name 문자열 아니요 이 엔드포인트의 레이블.
signing_token 문자열 아니요 whsec_ 형식의 HMAC 서명 시크릿. webhook-signature 헤더를 계산하는 데 사용되어 페이로드를 검증할 수 있습니다. 반환되지 않습니다.
token 문자열 아니요 X-Gitlab-Token 헤더로 그대로 전송되는 공유 시크릿. 반환되지 않습니다.

성공 시 201 Created 및 다음 응답 속성을 반환합니다:

속성 유형 설명
created_at 문자열 엔드포인트가 등록된 날짜와 시간.
id 정수 플로우 콜백 엔드포인트의 ID.
name 문자열 이 엔드포인트의 레이블.
signing_token_set 부울 signing_token이 설정되어 있는지 여부.
token_set 부울 token이 설정되어 있는지 여부.
url 문자열 콜백을 수신하는 HTTPS URL.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "url": "https://autoflow.example.com/duo/callbacks",
    "name": "AutoFlow",
    "signing_token": "whsec_<base64_encoded_32_byte_secret>"
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks"

응답 예시:

{
  "id": 1,
  "url": "https://autoflow.example.com/duo/callbacks",
  "name": "AutoFlow",
  "signing_token_set": true,
  "token_set": false,
  "created_at": "2026-07-22T11:37:00.000Z"
}

플로우 콜백 엔드포인트 나열#

조직에 등록된 플로우 콜백 엔드포인트를 나열합니다. 시크릿은 반환되지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
GET /ai/duo_workflows/flow_callbacks

pageper_page 페이지네이션 파라미터를 사용하여 결과의 페이지네이션을 제어합니다.

성공 시 200 OK플로우 콜백 엔드포인트 객체의 배열을 반환합니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks"

플로우 콜백 엔드포인트 가져오기#

등록된 플로우 콜백 엔드포인트 하나를 반환합니다. 시크릿은 반환되지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
GET /ai/duo_workflows/flow_callbacks/:id

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 플로우 콜백 엔드포인트의 ID.

성공 시 200 OK플로우 콜백 엔드포인트 객체를 반환합니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks/1"

플로우 콜백 엔드포인트 삭제#

등록된 플로우 콜백 엔드포인트를 삭제하여 더 이상 전달을 수신하지 않도록 합니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
DELETE /ai/duo_workflows/flow_callbacks/:id

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 플로우 콜백 엔드포인트의 ID.

성공 시 204 No Content를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks/1"

워크플로 트레이스를 JSONL로 가져오기#

워크플로 세션의 ui_chat_log 항목을 JSON Lines(JSONL) 형식으로 반환합니다. 각 줄은 ui_chat_log 배열에서 하나의 항목을 나타내는 유효한 JSON 객체입니다. 이 엔드포인트를 사용하여 트레이스를 파싱하거나 jq와 같은 도구로 파이프합니다.

기본적으로 이 엔드포인트는 컨텍스트 압축 이전의 메시지를 포함하여 세션의 모든 스레드에 걸친 전체 대화를 반환합니다. 대신 단일 스레드를 반환하려면 thread 속성을 사용하세요.

GET /ai/duo_workflows/workflows/:workflow_id/trace.jsonl

지원되는 속성:

속성 유형 필수 여부 설명
workflow_id 정수 워크플로의 ID.
thread 문자열 아니요 반환할 스레드. 모든 스레드에 걸친 전체 트레이스를 원하면 생략합니다. 가장 최근 스레드만 원하면 latest를, 특정 스레드를 원하면 스레드 ID를 사용합니다.

성공 시 200 OK와 함께 반환합니다:

  • Content-Type: application/x-ndjson

  • Body: 각 줄이 ui_chat_log 항목을 나타내는 JSON 객체 하나씩. 워크플로에 체크포인트가 없거나 ui_chat_log 항목이 없으면 빈 본문을 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl"

응답 예시(각 줄은 별도의 JSON 객체):

{"status":"success","content":"Analyze the issue","message_type":"human"}
{"status":"success","content":"I'll start by reading the codebase.","message_type":"ai"}

출력을 jq로 파이프하여 유형별로 항목을 필터링할 수 있습니다:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl" \
  | jq 'select(.message_type == "ai")'

모든 에이전트 권한 나열#

모든 사용 가능한 에이전트 권한을 해당 ID, 이름, 설명 및 기본 활성화 여부와 함께 나열합니다.

GET /ai/duo_workflows/workflows/agent_privileges

이 엔드포인트에는 지원되는 속성이 없습니다.

성공 시 200 OK 및 다음 응답 속성을 반환합니다:

속성 유형 설명
all_privileges 객체 배열 모든 사용 가능한 에이전트 권한.
all_privileges[].default_enabled 부울 권한이 기본적으로 활성화되어 있는지 여부.
all_privileges[].description 문자열 권한이 허용하는 것에 대한 사람이 읽을 수 있는 설명.
all_privileges[].id 정수 권한 ID.
all_privileges[].name 문자열 기계 판독 가능한 권한 이름.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/agent_privileges"

응답 예시:

{
  "all_privileges": [
    {
      "id": 1,
      "name": "read_write_files",
      "description": "Allow local filesystem read/write access",
      "default_enabled": true
    },
    {
      "id": 2,
      "name": "read_only_gitlab",
      "description": "Allow read only access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 3,
      "name": "read_write_gitlab",
      "description": "Allow write access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 4,
      "name": "run_commands",
      "description": "Allow running any commands",
      "default_enabled": true
    },
    {
      "id": 5,
      "name": "use_git",
      "description": "Allow git commits, push and other git commands",
      "default_enabled": true
    },
    {
      "id": 6,
      "name": "run_mcp_tools",
      "description": "Allow running MCP tools",
      "default_enabled": true
    }
  ]
}

플로우 API

GitLab v19.3
Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

이 API를 사용하여 GitLab Duo Agent Platform에서 플로우를 생성하고 관리합니다. 성공 시 201 Created 및 다음 응답 속성을 반환합니다: ai_catalog_item_consumer_id를 사용하기 전에 GraphQL API를 사용하여 AI 카탈로그에서 ID를 조회해야 합니다.

이 API를 사용하여 GitLab Duo Agent Platform에서 플로우를 생성하고 관리합니다. 플로우는 버그 수정, 코드 작성, 취약점 해결과 같은 개발자 작업을 완료하기 위해 함께 작동하는 AI 에이전트의 조합입니다.

플로우 트리거#

새 플로우를 트리거하고 시작합니다.

POST /ai/duo_workflows/workflows

지원되는 속성:

속성 유형 필수 여부 설명
additional_context 객체 배열 아니요 플로우의 추가 컨텍스트. 각 요소는 최소한 Category (문자열) 및 Content (문자열, 직렬화된 JSON) 키를 포함하는 객체여야 합니다.
agent_privileges 정수 배열 아니요 에이전트가 사용할 수 있는 권한 ID. 기본값은 모든 권한입니다. 모든 에이전트 권한 나열을 참조하세요.
ai_catalog_item_consumer_id 정수 아니요 실행할 카탈로그 항목을 구성하는 AI 카탈로그 항목 소비자의 ID. project_id가 필요합니다. workflow_definition과 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다. 소비자 ID 조회를 참조하세요.
ai_catalog_item_version_id 정수 아니요 플로우 구성의 소스인 AI 카탈로그 항목 버전의 ID.
allow_agent_to_request_user 부울 아니요 true(기본값)이면 에이전트가 진행 전에 사용자에게 질문하기 위해 일시 중지할 수 있습니다. false이면 에이전트가 사용자 입력 없이 완료까지 실행됩니다.
environment 문자열 아니요 실행 환경. ide, web, chat_partial, chat, ambient 중 하나.
goal 문자열 아니요 에이전트가 완료해야 할 작업의 설명. 예: Fix the failing pipeline.
image 문자열 아니요 CI 파이프라인에서 플로우를 실행할 때 사용할 컨테이너 이미지. 사용자 정의 이미지 요구 사항을 충족해야 합니다. 예: registry.gitlab.com/gitlab-org/duo-workflow/custom-image:latest.
issue_id 정수 아니요 플로우와 연결할 이슈의 IID. project_id가 필요합니다.
merge_request_id 정수 아니요 플로우와 연결할 머지 리퀘스트의 IID. project_id가 필요합니다.
namespace_id 문자열 아니요 플로우와 연결할 네임스페이스의 ID 또는 경로.
pre_approved_agent_privileges 정수 배열 아니요 에이전트가 사용자 승인 없이 사용할 수 있는 권한 ID. agent_privileges의 하위 집합이어야 합니다.
project_id 문자열 아니요 플로우와 연결할 프로젝트의 ID 또는 경로.
shallow_clone 부울 아니요 실행 중 리포지터리의 얕은 복제를 사용할지 여부. 기본값: true.
source_branch 문자열 아니요 CI 파이프라인의 소스 브랜치. 기본값은 프로젝트의 기본 브랜치.
start_workflow 부울 아니요 true이면 생성 후 즉시 플로우를 시작합니다.
workflow_definition 문자열 아니요 플로우 유형 식별자. 예: developer/v1. ai_catalog_item_consumer_id와 함께 사용할 수 없으며, 둘 다 제공되면 ai_catalog_item_consumer_id가 우선합니다.
source 문자열 아니요 UI에서 세션이 트리거된 위치.

성공 시 201 Created 및 다음 응답 속성을 반환합니다:

속성 유형 설명
agent_privileges 정수 배열 에이전트에 할당된 권한 ID.
agent_privileges_names 문자열 배열 agent_privileges에 대응하는 이름.
ai_catalog_item_version_id 정수 AI 카탈로그 항목 버전의 ID. 설정되지 않은 경우 null.
allow_agent_to_request_user 부울 true이면 에이전트가 사용자 입력을 위해 일시 중지할 수 있습니다.
environment 문자열 실행 환경. 설정되지 않은 경우 null.
gitlab_url 문자열 GitLab 인스턴스의 기본 URL.
id 정수 플로우의 ID.
image 문자열 CI 파이프라인 실행을 위한 컨테이너 이미지. 설정되지 않은 경우 null.
mcp_enabled 부울 이 플로우에 MCP(Model Context Protocol) 도구가 활성화되어 있는지 여부.
namespace_id 정수 연결된 네임스페이스의 ID. 설정되지 않은 경우 null.
pre_approved_agent_privileges 정수 배열 에이전트가 승인 없이 사용할 수 있는 권한 ID.
pre_approved_agent_privileges_names 문자열 배열 pre_approved_agent_privileges에 대응하는 이름.
project_id 정수 연결된 프로젝트의 ID. 설정되지 않은 경우 null.
status 문자열 현재 플로우 상태. created, running, paused, finished, failed, stopped, input_required, plan_approval_required 또는 tool_call_approval_required 중 하나.
summary 문자열 워크플로의 간단한 텍스트 요약.
title 문자열 세션 제목.
workflow_definition 문자열 플로우 유형 식별자.
workload 객체 워크로드에 대한 정보.
workload.id 문자열 워크로드의 ID.
workload.message 문자열 워크로드의 상태 메시지.

소비자 ID 조회#

ai_catalog_item_consumer_id를 사용하기 전에 GraphQL API를 사용하여 AI 카탈로그에서 ID를 조회해야 합니다. 항목이 이미 프로젝트에서 활성화되어 있어야 합니다.

query {
  aiCatalogConfiguredItems(projectId: "gid://gitlab/Project/<project_id>") {
    nodes {
      id
      item { name }
    }
  }
}

id 필드는 gid://gitlab/AiCatalogItemConsumer/<numeric_id> 형식의 전역 ID입니다. ai_catalog_item_consumer_id 값으로 숫자 접미사를 사용하세요.

기본 제공 플로우 유형을 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "workflow_definition": "developer/v1",
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

카탈로그 구성 플로우를 사용하는 요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "project_id": "5",
    "goal": "Fix the failing pipeline by correcting the syntax error in .gitlab-ci.yml",
    "ai_catalog_item_consumer_id": 12,
    "start_workflow": true
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows"

응답 예시:

{
  "id": 1,
  "project_id": 5,
  "namespace_id": null,
  "agent_privileges": [1, 2, 3, 4, 5, 6],
  "agent_privileges_names": [
    "read_write_files",
    "read_only_gitlab",
    "read_write_gitlab",
    "run_commands",
    "use_git",
    "run_mcp_tools"
  ],
  "pre_approved_agent_privileges": [],
  "pre_approved_agent_privileges_names": [],
  "workflow_definition": "developer/v1",
  "status": "running",
  "allow_agent_to_request_user": true,
  "image": null,
  "environment": null,
  "ai_catalog_item_version_id": null,
  "workload": {
    "id": "abc-123",
    "message": "Workflow started"
  },
  "mcp_enabled": false,
  "gitlab_url": "https://gitlab.example.com"
}

플로우 콜백 엔드포인트 등록#

플로우 수명 주기 이벤트(flow.started, flow.completed, flow.failed)를 수신하는 HTTPS 엔드포인트를 등록합니다. 플로우를 트리거할 때 반환된 idcallback_hook_id 속성으로 참조하면 상태를 폴링하는 대신 수명 주기 알림을 받을 수 있습니다.

URL과 시크릿은 저장 시 암호화되며, 등록 후에는 API가 절대 반환하지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
POST /ai/duo_workflows/flow_callbacks

지원되는 속성:

속성 유형 필수 여부 설명
url 문자열 콜백을 수신하는 HTTPS URL.
name 문자열 아니요 이 엔드포인트의 레이블.
signing_token 문자열 아니요 whsec_ 형식의 HMAC 서명 시크릿. webhook-signature 헤더를 계산하는 데 사용되어 페이로드를 검증할 수 있습니다. 반환되지 않습니다.
token 문자열 아니요 X-Gitlab-Token 헤더로 그대로 전송되는 공유 시크릿. 반환되지 않습니다.

성공 시 201 Created 및 다음 응답 속성을 반환합니다:

속성 유형 설명
created_at 문자열 엔드포인트가 등록된 날짜와 시간.
id 정수 플로우 콜백 엔드포인트의 ID.
name 문자열 이 엔드포인트의 레이블.
signing_token_set 부울 signing_token이 설정되어 있는지 여부.
token_set 부울 token이 설정되어 있는지 여부.
url 문자열 콜백을 수신하는 HTTPS URL.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "url": "https://autoflow.example.com/duo/callbacks",
    "name": "AutoFlow",
    "signing_token": "whsec_<base64_encoded_32_byte_secret>"
  }' \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks"

응답 예시:

{
  "id": 1,
  "url": "https://autoflow.example.com/duo/callbacks",
  "name": "AutoFlow",
  "signing_token_set": true,
  "token_set": false,
  "created_at": "2026-07-22T11:37:00.000Z"
}

플로우 콜백 엔드포인트 나열#

조직에 등록된 플로우 콜백 엔드포인트를 나열합니다. 시크릿은 반환되지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
GET /ai/duo_workflows/flow_callbacks

pageper_page 페이지네이션 파라미터를 사용하여 결과의 페이지네이션을 제어합니다.

성공 시 200 OK플로우 콜백 엔드포인트 객체의 배열을 반환합니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks"

플로우 콜백 엔드포인트 가져오기#

등록된 플로우 콜백 엔드포인트 하나를 반환합니다. 시크릿은 반환되지 않습니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
GET /ai/duo_workflows/flow_callbacks/:id

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 플로우 콜백 엔드포인트의 ID.

성공 시 200 OK플로우 콜백 엔드포인트 객체를 반환합니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks/1"

플로우 콜백 엔드포인트 삭제#

등록된 플로우 콜백 엔드포인트를 삭제하여 더 이상 전달을 수신하지 않도록 합니다.

사전 요구 사항:

  • 조직에 대한 Owner 역할이 있어야 합니다.
DELETE /ai/duo_workflows/flow_callbacks/:id

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 플로우 콜백 엔드포인트의 ID.

성공 시 204 No Content를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/flow_callbacks/1"

워크플로 트레이스를 JSONL로 가져오기#

워크플로 세션의 ui_chat_log 항목을 JSON Lines(JSONL) 형식으로 반환합니다. 각 줄은 ui_chat_log 배열에서 하나의 항목을 나타내는 유효한 JSON 객체입니다. 이 엔드포인트를 사용하여 트레이스를 파싱하거나 jq와 같은 도구로 파이프합니다.

기본적으로 이 엔드포인트는 컨텍스트 압축 이전의 메시지를 포함하여 세션의 모든 스레드에 걸친 전체 대화를 반환합니다. 대신 단일 스레드를 반환하려면 thread 속성을 사용하세요.

GET /ai/duo_workflows/workflows/:workflow_id/trace.jsonl

지원되는 속성:

속성 유형 필수 여부 설명
workflow_id 정수 워크플로의 ID.
thread 문자열 아니요 반환할 스레드. 모든 스레드에 걸친 전체 트레이스를 원하면 생략합니다. 가장 최근 스레드만 원하면 latest를, 특정 스레드를 원하면 스레드 ID를 사용합니다.

성공 시 200 OK와 함께 반환합니다:

  • Content-Type: application/x-ndjson

  • Body: 각 줄이 ui_chat_log 항목을 나타내는 JSON 객체 하나씩. 워크플로에 체크포인트가 없거나 ui_chat_log 항목이 없으면 빈 본문을 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl"

응답 예시(각 줄은 별도의 JSON 객체):

{"status":"success","content":"Analyze the issue","message_type":"human"}
{"status":"success","content":"I'll start by reading the codebase.","message_type":"ai"}

출력을 jq로 파이프하여 유형별로 항목을 필터링할 수 있습니다:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/1/trace.jsonl" \
  | jq 'select(.message_type == "ai")'

모든 에이전트 권한 나열#

모든 사용 가능한 에이전트 권한을 해당 ID, 이름, 설명 및 기본 활성화 여부와 함께 나열합니다.

GET /ai/duo_workflows/workflows/agent_privileges

이 엔드포인트에는 지원되는 속성이 없습니다.

성공 시 200 OK 및 다음 응답 속성을 반환합니다:

속성 유형 설명
all_privileges 객체 배열 모든 사용 가능한 에이전트 권한.
all_privileges[].default_enabled 부울 권한이 기본적으로 활성화되어 있는지 여부.
all_privileges[].description 문자열 권한이 허용하는 것에 대한 사람이 읽을 수 있는 설명.
all_privileges[].id 정수 권한 ID.
all_privileges[].name 문자열 기계 판독 가능한 권한 이름.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/ai/duo_workflows/workflows/agent_privileges"

응답 예시:

{
  "all_privileges": [
    {
      "id": 1,
      "name": "read_write_files",
      "description": "Allow local filesystem read/write access",
      "default_enabled": true
    },
    {
      "id": 2,
      "name": "read_only_gitlab",
      "description": "Allow read only access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 3,
      "name": "read_write_gitlab",
      "description": "Allow write access to GitLab APIs",
      "default_enabled": true
    },
    {
      "id": 4,
      "name": "run_commands",
      "description": "Allow running any commands",
      "default_enabled": true
    },
    {
      "id": 5,
      "name": "use_git",
      "description": "Allow git commits, push and other git commands",
      "default_enabled": true
    },
    {
      "id": 6,
      "name": "run_mcp_tools",
      "description": "Allow running MCP tools",
      "default_enabled": true
    }
  ]
}