REST API 참조

Ultralytics Platform은 데이터셋, 모델, 학습 및 배포에 프로그래밍 방식으로 접근할 수 있는 포괄적인 REST API를 제공합니다.

Ultralytics Platform Api Overview

빠른 시작
# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets
대화형 API 문서

Ultralytics Platform API 문서에서 전체 대화형 API 참조를 살펴보십시오.

API 개요

API는 핵심 플랫폼 리소스를 중심으로 구성되어 있습니다:

graph LR
    A[API Key] --> B[Datasets]
    A --> C[Projects]
    A --> D[Models]
    A --> E[Deployments]
    B -->|train on| D
    C -->|contains| D
    D -->|deploy to| E
    D -->|export| F[Exports]
    B -->|auto-annotate| B
리소스설명주요 작업
데이터셋라벨링된 이미지 모음CRUD, 이미지, 라벨, 내보내기, 버전, 복제
프로젝트학습 워크스페이스CRUD, 복제, 아이콘
모델학습된 체크포인트CRUD, 예측, 다운로드, 복제, 내보내기
배포전용 추론 엔드포인트CRUD, 시작/중지, 메트릭, 로그, 상태
내보내기형식 변환 작업생성, 상태, 다운로드
학습클라우드 GPU 학습 작업시작, 상태, 취소
결제크레딧 및 구독잔액, 충전, 결제 수단
워크스페이스 협업멤버, 초대, 역할

인증

데이터셋, 프로젝트, 모델, 학습, 내보내기 및 예측과 같은 리소스 API는 API-key 인증을 사용합니다. 공용 엔드포인트(공용 데이터셋, 프로젝트 및 모델 목록 조회)는 키 없이 익명 읽기 액세스를 지원합니다. 활동, 설정, 팀, 결제 및 GDPR 흐름을 포함한 계정 관련 경로는 현재 인증된 브라우저 세션이 필요하며 API key를 통해 사용할 수 없습니다.

API Key 가져오기

  1. Settings > API Keys로 이동합니다
  2. Create Key를 클릭합니다
  3. 생성된 키를 복사합니다

자세한 지침은 API Keys를 참조하십시오.

인증 헤더

모든 요청에 API key를 포함하십시오:

Authorization: Bearer YOUR_API_KEY
API Key 형식

API key는 ul_ 뒤에 40개의 16진수 문자가 오는 형식을 사용합니다. 키를 안전하게 보관하십시오. 버전 관리에 커밋하거나 공개적으로 공유하지 마십시오.

예시

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets

Base URL

모든 API 엔드포인트는 다음을 사용합니다:

https://platform.ultralytics.com/api

요청 제한

API는 오용을 방지하고 합법적인 사용을 제한 없이 유지하기 위해 API key별 요청 제한(슬라이딩 윈도우, Upstash Redis 기반)을 적용합니다. 익명 트래픽은 Vercel의 플랫폼 수준 오용 제어를 통해 추가로 보호됩니다.

스로틀이 적용되면 API는 재시도 메타데이터와 함께 429 상태 코드를 반환합니다:

Retry-After: 12
X-RateLimit-Reset: 2026-02-21T12:34:56.000Z

API Key별 제한

요청 제한은 호출되는 엔드포인트에 따라 자동으로 적용됩니다. 비용이 많이 드는 작업은 오용을 방지하기 위해 더 엄격한 제한이 적용되며, 표준 CRUD 작업은 넉넉한 기본값을 공유합니다:

엔드포인트제한적용 대상
기본값분당 100회 요청아래 나열되지 않은 모든 엔드포인트(목록, 조회, 생성, 업데이트, 삭제)
학습분당 10회 요청클라우드 학습 작업 시작(POST /api/training/start)
업로드(Upload)분당 10회 요청파일 업로드, 서명된 URL 및 데이터셋 수집
예측 (Predict)분당 20회 요청공유 모델 추론(POST /api/models/{id}/predict)
내보내기(Export)분당 20회 요청모델 형식 내보내기(POST /api/exports), 데이터셋 NDJSON 내보내기 및 버전 생성
다운로드분당 30회 요청모델 가중치 파일 다운로드(GET /api/models/{id}/download)
전용제한 없음전용 엔드포인트 — 자체 서비스, API 제한 없음

각 카테고리는 API key마다 독립적인 카운터를 가집니다. 예를 들어, 20회의 예측 요청을 수행해도 분당 100회 요청인 기본 허용량에는 영향을 미치지 않습니다.

전용 엔드포인트(제한 없음)

전용 엔드포인트API key 요청 제한의 대상이 아닙니다. 모델을 전용 엔드포인트에 배포하면 해당 엔드포인트 URL(예: https://predict-abc123.run.app/predict)로 보내는 요청은 플랫폼의 요청 제한 없이 귀하의 전용 서비스로 직접 전달됩니다. 컴퓨팅 자원에 대해 비용을 지불하므로 공유 API 제한이 아닌 전용 서비스 구성에 따른 처리량을 얻게 됩니다.

요청 제한 처리

429 상태 코드를 받으면 Retry-After가 지난 후(또는 X-RateLimit-Reset까지) 재시도하십시오. 지수 백오프 구현은 요청 제한 FAQ를 참조하십시오.

응답 형식

성공 응답

응답은 리소스별 필드를 포함하는 JSON을 반환합니다:

{
    "datasets": [...],
    "total": 100
}

오류 응답

{
    "error": "Dataset not found"
}
HTTP 상태의미
200성공
201생성됨
400잘못된 요청
401인증 필요
403권한 부족
404리소스 찾을 수 없음
409충돌(중복)
429요청 제한 초과
500서버 오류

데이터셋 API

YOLO 모델 학습을 위한 라벨링된 이미지 데이터셋을 생성, 탐색 및 관리합니다. 데이터셋 문서를 참조하십시오.

데이터셋 목록

GET /api/datasets

쿼리 매개변수:

매개변수유형설명
usernamestring사용자 이름별로 필터링합니다.
slugstring슬러그(slug)로 단일 데이터셋을 가져옵니다.
limitint페이지당 항목 수 (기본값: 20, 최대값: 500)
ownerstring워크스페이스 소유자 사용자 이름
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets?limit=10"

응답:

{
    "datasets": [
        {
            "_id": "dataset_abc123",
            "name": "my-dataset",
            "slug": "my-dataset",
            "task": "detect",
            "imageCount": 1000,
            "classCount": 10,
            "classNames": ["person", "car"],
            "visibility": "private",
            "username": "johndoe",
            "starCount": 3,
            "isStarred": false,
            "sampleImages": [
                {
                    "url": "https://storage.example.com/...",
                    "width": 1920,
                    "height": 1080,
                    "labels": [{ "classId": 0, "bbox": [0.5, 0.4, 0.3, 0.6] }]
                }
            ],
            "createdAt": "2024-01-15T10:00:00Z",
            "updatedAt": "2024-01-16T08:30:00Z"
        }
    ],
    "total": 1,
    "region": "us"
}

데이터셋 가져오기

GET /api/datasets/{datasetId}

메타데이터, 클래스 이름, 분할 수(split counts)를 포함한 전체 데이터셋 세부 정보를 반환합니다.

데이터셋 생성

POST /api/datasets

본문:

{
    "slug": "my-dataset",
    "name": "My Dataset",
    "task": "detect",
    "description": "A custom detection dataset",
    "visibility": "private",
    "classNames": ["person", "car"]
}
지원되는 작업

유효한 task 값: detect, segment, classify, pose, obb.

데이터셋 업데이트

PATCH /api/datasets/{datasetId}

본문 (부분 업데이트):

{
    "name": "Updated Name",
    "description": "New description",
    "visibility": "public"
}

데이터셋 삭제

DELETE /api/datasets/{datasetId}

데이터셋을 소프트 삭제합니다 (휴지통으로 이동되며 30일 동안 복구 가능).

데이터셋 복제

POST /api/datasets/{datasetId}/clone

모든 이미지와 라벨을 포함하여 데이터셋의 복사본을 생성합니다. 공개 데이터셋만 복제할 수 있습니다. 활성 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 사용할 수 없습니다.

본문 (모든 필드 선택 사항):

{
    "name": "cloned-dataset",
    "description": "My cloned dataset",
    "visibility": "private",
    "owner": "team-username"
}

데이터셋 내보내기

GET /api/datasets/{datasetId}/export

최신 데이터셋 내보내기에 대한 서명된 다운로드 URL이 포함된 JSON 응답을 반환합니다.

쿼리 매개변수:

매개변수유형설명
vinteger버전 번호 (1부터 시작). 생략 시 최신(캐시되지 않은) 내보내기가 반환됩니다.

응답:

{
    "downloadUrl": "https://storage.example.com/export.ndjson?signed=...",
    "cached": true
}

데이터셋 버전 생성

POST /api/datasets/{datasetId}/export

데이터셋의 새로운 번호 지정 버전 스냅샷을 생성합니다. 소유자만 가능합니다. 이 버전은 현재 이미지 수, 클래스 수, 어노테이션 수 및 분할 분포를 캡처한 다음 불변의 NDJSON 내보내기를 생성하고 저장합니다.

요청 본문:

{
    "description": "Added 500 training images"
}

모든 필드는 선택 사항입니다. description 필드는 사용자가 제공하는 버전 라벨입니다.

응답:

{
    "version": 3,
    "downloadUrl": "https://storage.example.com/v3.ndjson?signed=..."
}

버전 설명 업데이트

PATCH /api/datasets/{datasetId}/export

기존 버전의 설명을 업데이트합니다. 소유자만 가능합니다.

요청 본문:

{
    "version": 2,
    "description": "Fixed mislabeled classes"
}

응답:

{
    "ok": true
}

클래스 통계 가져오기

GET /api/datasets/{datasetId}/class-stats

클래스 분포, 위치 히트맵, 차원 통계를 반환합니다. 결과는 최대 5분 동안 캐시됩니다.

응답:

{
    "classes": [{ "classId": 0, "count": 1500, "imageCount": 450 }],
    "imageStats": {
        "widthHistogram": [{ "bin": 640, "count": 120 }],
        "heightHistogram": [{ "bin": 480, "count": 95 }],
        "pointsHistogram": [{ "bin": 4, "count": 200 }]
    },
    "locationHeatmap": {
        "bins": [
            [5, 10],
            [8, 3]
        ],
        "maxCount": 50
    },
    "dimensionHeatmap": {
        "bins": [
            [2, 5],
            [3, 1]
        ],
        "maxCount": 12,
        "minWidth": 10,
        "maxWidth": 1920,
        "minHeight": 10,
        "maxHeight": 1080
    },
    "classNames": ["person", "car", "dog"],
    "cached": true,
    "sampled": false,
    "sampleSize": 1000
}

데이터셋으로 학습된 모델 가져오기

GET /api/datasets/{datasetId}/models

이 데이터셋을 사용하여 학습된 모델을 반환합니다.

응답:

{
    "models": [
        {
            "_id": "model_abc123",
            "name": "experiment-1",
            "slug": "experiment-1",
            "status": "completed",
            "task": "detect",
            "epochs": 100,
            "bestEpoch": 87,
            "projectId": "project_xyz",
            "projectSlug": "my-project",
            "projectIconColor": "#3b82f6",
            "projectIconLetter": "M",
            "username": "johndoe",
            "startedAt": "2024-01-14T22:00:00Z",
            "completedAt": "2024-01-15T10:00:00Z",
            "createdAt": "2024-01-14T21:55:00Z",
            "metrics": {
                "mAP50": 0.85,
                "mAP50-95": 0.72,
                "precision": 0.88,
                "recall": 0.81
            }
        }
    ],
    "count": 1
}

데이터셋 자동 어노테이션

POST /api/datasets/{datasetId}/predict

데이터셋 이미지에서 YOLO 추론을 실행하여 어노테이션을 자동 생성합니다. 선택한 모델을 사용하여 어노테이션이 없는 이미지의 라벨을 예측합니다.

본문:

필드유형필수설명
imageHashstring어노테이션할 이미지의 해시
modelIdstring아니요추론에 사용할 모델 ID
confidencefloat아니요신뢰도 임계값 (기본값: 0.25)
ioufloat아니요IoU 임계값 (기본값: 0.45)

데이터셋 수집(Ingest)

POST /api/datasets/ingest

이미지와 라벨이 포함된 .tar.gz.tgz를 포함한 ZIP 또는 TAR 파일을 처리하기 위해 데이터셋 수집 작업을 생성합니다.

graph LR
    A[Upload Archive] --> B[POST /api/datasets/ingest]
    B --> C[Process Archive]
    C --> D[Extract images]
    C --> E[Parse labels]
    C --> F[Generate thumbnails]
    D & E & F --> G[Dataset ready]

데이터셋 이미지

이미지 목록

GET /api/datasets/{datasetId}/images

쿼리 매개변수:

매개변수유형설명
splitstring분할별 필터링: train, val, test
offsetint페이지 매김 오프셋 (기본값: 0)
limitint페이지당 항목 수 (기본값: 50, 최대값: 5000)
sortstring정렬 순서: newest, oldest, name-asc, name-desc, height-asc, height-desc, width-asc, width-desc, size-asc, size-desc, labels-asc, labels-desc (10만 개 이상의 이미지 데이터셋에서는 일부 비활성화됨)
hasLabelstring라벨 상태별 필터링 (true 또는 false)
hasErrorstring오류 상태별 필터링 (true 또는 false)
searchstring파일 이름 또는 이미지 해시로 검색
includeThumbnailsstring서명된 썸네일 URL 포함 (기본값: true)
includeImageUrlsstring서명된 전체 이미지 URL 포함 (기본값: false)

서명된 이미지 URL 가져오기

POST /api/datasets/{datasetId}/images/urls

이미지 해시 배치에 대한 서명된 URL을 가져옵니다 (브라우저 표시용).

이미지 삭제

DELETE /api/datasets/{datasetId}/images/{hash}

이미지 라벨 가져오기

GET /api/datasets/{datasetId}/images/{hash}/labels

특정 이미지에 대한 어노테이션과 클래스 이름을 반환합니다.

이미지 라벨 업데이트

PUT /api/datasets/{datasetId}/images/{hash}/labels

본문:

{
    "labels": [
        { "classId": 0, "bbox": [0.5, 0.5, 0.2, 0.3] },
        { "classId": 1, "segments": [0.1, 0.2, 0.3, 0.2, 0.2, 0.4] }
    ]
}
좌표 형식

라벨 좌표는 0과 1 사이의 YOLO 정규화 값을 사용합니다. 바운딩 박스는 [x_center, y_center, width, height]를 사용합니다. 세그멘테이션 라벨은 다각형 정점의 평탄화된 목록인 segments [x1, y1, x2, y2, ...]를 사용합니다.

대량 이미지 작업

데이터셋 내에서 분할(train/val/test) 간에 이미지를 이동합니다:

PATCH /api/datasets/{datasetId}/images/bulk

이미지 대량 삭제:

DELETE /api/datasets/{datasetId}/images/bulk

프로젝트 API

모델을 프로젝트별로 구성합니다. 각 모델은 하나의 프로젝트에 속합니다. 프로젝트 문서를 참조하십시오.

프로젝트 목록

GET /api/projects

쿼리 매개변수:

매개변수유형설명
usernamestring사용자 이름별로 필터링합니다.
limitint페이지당 항목 수
ownerstring워크스페이스 소유자 사용자 이름

프로젝트 가져오기

GET /api/projects/{projectId}

프로젝트 생성

POST /api/projects
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-project", "slug": "my-project", "description": "Detection experiments"}' \
  https://platform.ultralytics.com/api/projects

프로젝트 업데이트

PATCH /api/projects/{projectId}

프로젝트 삭제

DELETE /api/projects/{projectId}

프로젝트를 소프트 삭제합니다 (휴지통으로 이동).

프로젝트 복제

POST /api/projects/{projectId}/clone

공개 프로젝트(모든 모델 포함)를 사용자의 워크스페이스로 복제합니다. 활성 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 사용할 수 없습니다.

프로젝트 아이콘

프로젝트 아이콘 업로드 (이미지 파일이 포함된 멀티파트 폼):

POST /api/projects/{projectId}/icon

프로젝트 아이콘 제거:

DELETE /api/projects/{projectId}/icon

두 기능 모두 활성 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 사용할 수 없습니다.


모델 API

학습된 YOLO 모델을 관리합니다. 지표 확인, 가중치 다운로드, 추론 실행, 다른 형식으로 내보내기가 가능합니다. 모델 문서를 참조하십시오.

모델 목록

GET /api/models

쿼리 매개변수:

매개변수유형필수설명
projectIdstring프로젝트 ID (필수)
fieldsstring아니요필드 세트: summary, charts
idsstring아니요쉼표로 구분된 모델 ID
limitint아니요최대 결과 수 (기본값 20, 최대 100)

완료된 모델 목록

GET /api/models/completed

학습이 완료된 모델을 반환합니다 (모델 선택기 및 배포에 사용).

모델 가져오기

GET /api/models/{modelId}

모델 생성

POST /api/models

JSON 본문:

필드유형필수설명
projectIdstring대상 프로젝트 ID
slugstring아니요URL 슬러그 (소문자 영문/숫자/하이픈)
namestring아니요표시 이름 (최대 100자)
descriptionstring아니요모델 설명 (최대 1000자)
taskstring아니요작업 유형 (detect, segment, pose, obb, classify)
모델 파일 업로드

모델 .pt 파일 업로드는 별도로 처리됩니다. 플랫폼 UI를 사용하여 모델 파일을 프로젝트로 끌어다 놓으십시오.

모델 업데이트

PATCH /api/models/{modelId}

모델 삭제

DELETE /api/models/{modelId}

모델 파일 다운로드

GET /api/models/{modelId}/files

모델 파일에 대한 서명된 다운로드 URL을 반환합니다.

모델 복제

POST /api/models/{modelId}/clone

공개 모델을 본인의 프로젝트 중 하나로 복제합니다. 활성 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 사용할 수 없습니다.

본문:

{
    "targetProjectSlug": "my-project",
    "modelName": "cloned-model",
    "description": "Cloned from public model",
    "owner": "team-username"
}
필드유형필수설명
targetProjectSlugstring대상 프로젝트 슬러그
modelNamestring아니요복제할 모델 이름
descriptionstring아니요모델 설명
ownerstring아니요팀 사용자 이름 (워크스페이스 복제용)

다운로드 추적

POST /api/models/{modelId}/track-download

모델 다운로드 분석을 추적합니다.

추론 실행

POST /api/models/{modelId}/predict

멀티파트 폼:

필드유형설명
file파일이미지 파일 (JPEG, PNG, WebP)
conffloat신뢰도 임계값 (기본값: 0.25)
ioufloatIoU 임계값 (기본값: 0.7)
imgszint픽셀 단위 이미지 크기 (기본값: 640)
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@image.jpg" \
  -F "conf=0.5" \
  https://platform.ultralytics.com/api/models/MODEL_ID/predict

응답:

{
    "images": [
        {
            "shape": [1080, 1920],
            "results": [
                {
                    "class": 0,
                    "name": "person",
                    "confidence": 0.92,
                    "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
                }
            ]
        }
    ],
    "metadata": {
        "imageCount": 1
    }
}

예측 토큰 가져오기

POST /api/models/{modelId}/predict/token
브라우저 세션 전용

이 경로는 앱 내 Predict 탭에서 브라우저에서 직접 predict-service로 호출하기 위한 단기 추론 토큰을 발급할 때 사용됩니다 (지연 시간 감소, API 프록시 없음). 이 기능은 활성 플랫폼 브라우저 세션이 필요하며 API 키로는 사용할 수 없습니다. 프로그래밍 방식의 추론을 원하시면 API 키를 사용하여 POST /api/models/{modelId}/predict를 호출하십시오.

모델 웜업

POST /api/models/{modelId}/predict/warmup
브라우저 세션 전용

웜업 경로는 Predict 탭에서 사용자의 첫 번째 추론 전에 예측 서비스에서 모델의 가중치를 미리 로드하기 위해 사용됩니다. 이 기능은 활성 플랫폼 브라우저 세션이 필요하며 API 키로는 사용할 수 없습니다.


학습 API

클라우드 GPU(RTX 2000 Ada부터 B300까지 24종의 GPU 유형)에서 YOLO 학습을 시작하고 실시간으로 진행 상황을 모니터링하십시오. 클라우드 학습 문서를 참조하십시오.

graph LR
    A[POST /training/start] --> B[Job Created]
    B --> C{Training}
    C -->|progress| D[GET /models/id/training]
    C -->|cancel| E[DELETE /models/id/training]
    C -->|complete| F[Model Ready]
    F --> G[Deploy or Export]

학습 시작

POST /api/training/start
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "modelId": "MODEL_ID",
    "projectId": "PROJECT_ID",
    "gpuType": "rtx-4090",
    "trainArgs": {
      "model": "yolo26n.pt",
      "data": "ul://username/datasets/my-dataset",
      "epochs": 100,
      "imgsz": 640,
      "batch": 16
    }
  }' \
  https://platform.ultralytics.com/api/training/start
GPU 유형

사용 가능한 GPU 유형으로는 rtx-4090, a100-80gb-pcie, a100-80gb-sxm, h100-sxm, rtx-pro-6000, b300 등이 있습니다. 가격을 포함한 전체 목록은 클라우드 학습을 참조하십시오.

학습 상태 가져오기

GET /api/models/{modelId}/training

모델의 현재 학습 작업 상태, 지표 및 진행 상황을 반환합니다. 공개 프로젝트는 익명으로 액세스할 수 있지만 비공개 프로젝트는 활성 플랫폼 브라우저 세션이 필요합니다 (이 경로는 API 키 인증을 허용하지 않습니다).

학습 취소

DELETE /api/models/{modelId}/training

실행 중인 컴퓨팅 인스턴스를 종료하고 작업을 취소된 것으로 표시합니다. 활성 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 사용할 수 없습니다.


배포 API

상태 확인 및 모니터링 기능을 갖춘 전용 추론 엔드포인트에 모델을 배포합니다. 새 배포는 기본적으로 'scale-to-zero'를 사용하며 API는 선택적으로 resources 객체를 허용합니다. 엔드포인트 문서를 참조하십시오.

경로별 API 키 지원

GET /api/deployments, POST /api/deployments, GET /api/deployments/{deploymentId}, DELETE /api/deployments/{deploymentId} 경로만 API 키 인증을 지원합니다. predict, health, logs, metrics, start, stop 하위 경로는 활성 플랫폼 브라우저 세션이 필요하며 이는 앱 내 UI를 위한 편의 프록시입니다. 프로그래밍 방식의 추론을 위해서는 API 키를 사용하여 배포의 자체 엔드포인트 URL (예: https://predict-abc123.run.app/predict)을 직접 호출하십시오. 전용 엔드포인트는 속도 제한이 적용되지 않습니다.

graph LR
    A[Create] --> B[Deploying]
    B --> C[Ready]
    C -->|stop| D[Stopped]
    D -->|start| C
    C -->|delete| E[Deleted]
    D -->|delete| E
    C -->|predict| F[Inference Results]

배포 목록

GET /api/deployments

쿼리 매개변수:

매개변수유형설명
modelIdstring모델별 필터링
statusstring상태별 필터링
limitint최대 결과 수 (기본값: 20, 최대: 100)
ownerstring워크스페이스 소유자 사용자 이름

배포 생성

POST /api/deployments

본문:

{
    "modelId": "model_abc123",
    "name": "my-deployment",
    "region": "us-central1",
    "resources": {
        "cpu": 1,
        "memoryGi": 2,
        "minInstances": 0,
        "maxInstances": 1
    }
}
필드유형필수설명
modelIdstring배포할 모델 ID
namestring배포 이름
regionstring배포 리전
resources객체아니요리소스 구성 (cpu, memoryGi, minInstances, maxInstances)

지정된 리전에 전용 추론 엔드포인트를 생성합니다. 엔드포인트는 고유 URL을 통해 전 세계 어디서나 액세스할 수 있습니다.

기본 리소스

배포 대화 상자는 현재 cpu=1, memoryGi=2, minInstances=0, maxInstances=1의 고정된 기본값을 제출합니다. API 경로는 resources 객체를 허용하지만 플랜 제한에 따라 minInstances0, maxInstances1로 제한됩니다.

지역 선택

최상의 지연 시간을 위해 사용자에게 가까운 리전을 선택하십시오. 플랫폼 UI는 사용 가능한 43개 모든 리전에 대한 지연 시간 추정치를 보여줍니다.

배포 가져오기

GET /api/deployments/{deploymentId}

배포 삭제

DELETE /api/deployments/{deploymentId}

배포 시작

POST /api/deployments/{deploymentId}/start

중지된 배포를 재개합니다.

배포 중지

POST /api/deployments/{deploymentId}/stop

실행 중인 배포를 일시 중지합니다 (요금 청구 중단).

상태 확인

GET /api/deployments/{deploymentId}/health

배포 엔드포인트의 상태를 반환합니다.

배포에서 추론 실행

POST /api/deployments/{deploymentId}/predict

추론을 위해 이미지를 배포 엔드포인트로 직접 보냅니다. 모델 예측과 기능적으로 동일하지만 더 낮은 지연 시간을 위해 전용 엔드포인트를 통합니다.

멀티파트 폼:

필드유형설명
file파일이미지 파일 (JPEG, PNG, WebP)
conffloat신뢰도 임계값 (기본값: 0.25)
ioufloatIoU 임계값 (기본값: 0.7)
imgszint픽셀 단위 이미지 크기 (기본값: 640)

지표 가져오기

GET /api/deployments/{deploymentId}/metrics

스파크라인 데이터를 포함하여 요청 수, 지연 시간, 오류율 지표를 반환합니다.

쿼리 매개변수:

매개변수유형설명
rangestring시간 범위: 1h, 6h, 24h (기본값), 7d, 30d
sparklinestring대시보드 보기를 위해 최적화된 스파크라인 데이터를 원하면 true로 설정하십시오

로그 가져오기

GET /api/deployments/{deploymentId}/logs

쿼리 매개변수:

매개변수유형설명
severitystring쉼표로 구분된 필터: DEBUG, INFO, WARNING, ERROR, CRITICAL
limitint항목 수 (기본값: 50, 최대: 200)
pageTokenstring이전 응답에서 제공된 페이지네이션 토큰입니다.

모니터링 API

브라우저 세션 전용

GET /api/monitoring은 UI 전용 경로이며 활성화된 플랫폼 브라우저 세션이 필요합니다. API 키 인증을 지원하지 않습니다. 개별 배포 메트릭을 쿼리하려면 배포별 경로(마찬가지로 브라우저 세션 전용)를 사용하거나, 프로그래밍 방식의 액세스가 필요한 경우 배포된 Cloud Run 서비스에서 Cloud Monitoring exports를 사용하십시오.

집계된 메트릭

GET /api/monitoring

모든 사용자 배포 전반의 집계된 메트릭(총 요청 수, 활성 배포 수, 오류율, 평균 지연 시간)을 반환합니다.


내보내기(Export) API

모델을 ONNX, TensorRT, CoreML, TFLite와 같은 최적화된 형식으로 변환하여 엣지 환경에 배포하십시오. 배포 문서를 참조하십시오.

내보내기 목록 조회

GET /api/exports

쿼리 매개변수:

매개변수유형설명
modelIdstring모델 ID (필수)
statusstring상태별 필터링
limitint최대 결과 수 (기본값: 20, 최대: 100)

내보내기 생성

POST /api/exports

본문:

필드유형필수설명
modelIdstring원본 모델 ID
formatstring내보내기 형식 (아래 표 참조)
gpuTypestring조건부formatengine(TensorRT)일 때 필수입니다.
args객체아니요내보내기 인수 (imgsz, half, dynamic 등)
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"modelId": "MODEL_ID", "format": "onnx"}' \
  https://platform.ultralytics.com/api/exports

지원되는 형식:

형식사용 사례
ONNXonnx크로스 플랫폼 추론
TorchScripttorchscriptPyTorch 배포
OpenVINOopenvinoIntel 하드웨어
TensorRTengineNVIDIA GPU 최적화
CoreMLcoremlApple 기기
TFLitetflite모바일 및 임베디드
TF SavedModelsaved_modelTensorFlow Serving
TF GraphDefpbTensorFlow 고정 그래프
PaddlePaddlepaddleBaidu PaddlePaddle
NCNNncnn모바일 신경망
Edge TPUedgetpuGoogle Coral 기기
TF.jstfjs브라우저 추론
MNNmnnAlibaba 모바일 추론
RKNNrknnRockchip NPU
IMXimxSony IMX500 센서
AxeleraaxeleraAxelera AI 가속기
ExecuTorchexecutorchMeta ExecuTorch 런타임

내보내기 상태 조회

GET /api/exports/{exportId}

내보내기 취소

DELETE /api/exports/{exportId}

내보내기 다운로드 추적

POST /api/exports/{exportId}/track-download

활동(Activity) API

학습 실행, 업로드 등 계정의 최근 작업 피드를 확인하십시오. 활동 문서를 참조하십시오.

브라우저 세션 전용

활동 관련 경로는 플랫폼 UI에서 브라우저로 인증된 요청을 통해 작동합니다. 공개 API로 노출되지 않으며 API 키 인증을 허용하지 않습니다. 아래 경로 구성은 참조용으로만 기록되었습니다. 이벤트 확인, 표시 또는 아카이브하려면 플랫폼 UI의 활동 피드를 사용하십시오.

활동 목록 조회

GET /api/activity

쿼리 매개변수:

매개변수유형설명
limitint페이지 크기 (기본값: 20, 최대: 100)
pageint페이지 번호 (기본값: 1)
archived불리언(boolean)아카이브 탭은 true, 받은 편지함은 false
searchstring이벤트 필드 내 대소문자 구분 없는 검색

이벤트를 읽음으로 표시

POST /api/activity/mark-seen

본문:

{
    "all": true
}

또는 특정 ID를 전달하십시오:

{
    "eventIds": ["EVENT_ID_1", "EVENT_ID_2"]
}

이벤트 아카이브

POST /api/activity/archive

본문:

{
    "all": true,
    "archive": true
}

또는 특정 ID를 전달하십시오:

{
    "eventIds": ["EVENT_ID_1", "EVENT_ID_2"],
    "archive": false
}

휴지통(Trash) API

삭제된 항목을 확인하고 복원하십시오. 항목은 30일 후 영구적으로 삭제됩니다. 휴지통 문서를 참조하십시오.

휴지통 목록 조회

GET /api/trash

쿼리 매개변수:

매개변수유형설명
typestring필터: all, project, dataset, model
pageint페이지 번호 (기본값: 1)
limitint페이지당 항목 수 (기본값: 50, 최대: 200)
ownerstring워크스페이스 소유자 사용자 이름

항목 복원

POST /api/trash

본문:

{
    "id": "item_abc123",
    "type": "dataset"
}

항목 영구 삭제

DELETE /api/trash

본문:

{
    "id": "item_abc123",
    "type": "dataset"
}
되돌릴 수 없음

영구 삭제는 되돌릴 수 없습니다. 리소스 및 관련 데이터가 모두 제거됩니다.

휴지통 비우기

DELETE /api/trash/empty

휴지통의 모든 항목을 영구적으로 삭제합니다.

인증

DELETE /api/trash/empty는 인증된 브라우저 세션이 필요하며 API 키를 통해 사용할 수 없습니다. 대신 UI의 휴지통 비우기 버튼을 사용하십시오.


결제(Billing) API

크레딧 잔액 확인, 크레딧 구매, 거래 내역 조회 및 자동 충전을 설정하십시오. 결제 문서를 참조하십시오.

통화 단위

결제 금액은 센트 단위(creditsCents)를 사용하며 100 = $1.00입니다.

잔액 조회

GET /api/billing/balance

쿼리 매개변수:

매개변수유형설명
ownerstring워크스페이스 소유자 사용자 이름

응답:

{
    "creditsCents": 2500,
    "plan": "free",
    "cashBalance": 25,
    "creditBalance": 0,
    "reservedAmount": 0,
    "totalBalance": 25
}

사용량 요약 조회

GET /api/billing/usage-summary

플랜 세부 정보, 제한 사항 및 사용량 메트릭을 반환합니다.

거래 내역 조회

GET /api/billing/transactions

거래 내역을 반환합니다 (최신 항목 순).

쿼리 매개변수:

매개변수유형설명
ownerstring워크스페이스 소유자 사용자 이름

체크아웃 세션 생성

POST /api/billing/checkout-session

본문:

{
    "amount": 25,
    "owner": "team-username"
}
필드유형필수설명
amount숫자(number)달러 단위 금액 ($5-$1000)
ownerstring아니요워크스페이스 충전을 위한 팀 사용자 이름 (관리자 역할 필요)

크레딧 구매를 위한 체크아웃 세션을 생성합니다.

구독 체크아웃 생성

POST /api/billing/subscription-checkout

Pro 구독 업그레이드를 위한 체크아웃 세션을 생성합니다.

본문:

{
    "planId": "pro",
    "billingCycle": "monthly",
    "owner": "team-username"
}
필드유형필수설명
planIdstring구독할 플랜 (pro)
billingCyclestring아니요청구 주기: monthly (기본값) 또는 yearly
ownerstring아니요워크스페이스 업그레이드를 위한 팀 사용자 이름 (관리자 역할 필요)

구독 취소 또는 재개

DELETE /api/billing/subscription-checkout

기본적으로 기간 종료 시 Pro 구독을 취소합니다. 청구 기간이 끝나기 전에 예약된 취소를 재개하려면 {"resume": true}를 보내십시오.

본문:

{
    "resume": true
}

자동 충전

잔액이 임계값 아래로 떨어지면 자동으로 크레딧을 추가합니다.

자동 충전 구성 가져오기

GET /api/billing/auto-topup

쿼리 매개변수:

매개변수유형설명
ownerstring워크스페이스 소유자 사용자 이름

자동 충전 구성 업데이트

PATCH /api/billing/auto-topup

본문:

{
    "enabled": true,
    "thresholdCents": 500,
    "amountCents": 2500
}

결제 수단

결제 수단 목록

GET /api/billing/payment-methods

설정 인텐트(Setup Intent) 생성

POST /api/billing/payment-methods/setup

새 결제 수단을 추가하기 위한 클라이언트 비밀 키를 반환합니다.

기본 결제 수단 설정

POST /api/billing/payment-methods/default

본문:

{
    "paymentMethodId": "pm_123"
}

청구 정보 업데이트

PATCH /api/billing/payment-methods

본문:

{
    "name": "Jane Doe",
    "address": {
        "line1": "123 Main St",
        "city": "San Francisco",
        "state": "CA",
        "postal_code": "94105",
        "country": "US"
    }
}

결제 수단 삭제

DELETE /api/billing/payment-methods/{id}

스토리지 API

범주별(데이터셋, 모델, 내보내기) 스토리지 사용 내역을 확인하고 가장 큰 항목을 조회합니다.

브라우저 세션 전용

스토리지 경로는 활성화된 플랫폼 브라우저 세션이 필요하며 API 키를 통해서는 액세스할 수 없습니다. 대화형 분석을 위해서는 UI의 설정 > 프로필 페이지를 사용하십시오.

스토리지 정보 가져오기

GET /api/storage

응답:

{
    "tier": "free",
    "usage": {
        "storage": {
            "current": 1073741824,
            "limit": 107374182400,
            "percent": 1.0
        }
    },
    "region": "us",
    "username": "johndoe",
    "updatedAt": "2024-01-15T10:00:00Z",
    "breakdown": {
        "byCategory": {
            "datasets": { "bytes": 536870912, "count": 2 },
            "models": { "bytes": 268435456, "count": 4 },
            "exports": { "bytes": 268435456, "count": 3 }
        },
        "topItems": [
            {
                "_id": "dataset_abc123",
                "name": "my-dataset",
                "slug": "my-dataset",
                "sizeBytes": 536870912,
                "type": "dataset"
            },
            {
                "_id": "model_def456",
                "name": "experiment-1",
                "slug": "experiment-1",
                "sizeBytes": 134217728,
                "type": "model",
                "parentName": "My Project",
                "parentSlug": "my-project"
            }
        ]
    }
}

업로드 API

서명된 URL을 사용하여 클라우드 스토리지로 파일을 직접 업로드하여 빠르고 안정적으로 전송합니다. 서명된 URL을 가져온 후 파일을 업로드하는 2단계 흐름을 사용합니다. 데이터 문서를 참조하십시오.

서명된 업로드 URL 가져오기

POST /api/upload/signed-url

클라우드 스토리지로 파일을 직접 업로드하기 위한 서명된 URL을 요청합니다. 서명된 URL은 대용량 파일 전송 시 API 서버를 우회합니다.

본문:

{
    "assetType": "images",
    "assetId": "abc123",
    "filename": "my-image.jpg",
    "contentType": "image/jpeg",
    "totalBytes": 5242880
}
필드유형설명
assetTypestring자산 유형: models, datasets, images, videos
assetIdstring대상 자산의 ID
filenamestring원본 파일 이름
contentTypestringMIME 유형
totalBytesint바이트 단위의 파일 크기

응답:

{
    "sessionId": "session_abc123",
    "uploadUrl": "https://storage.example.com/...",
    "objectPath": "images/abc123/my-image.jpg",
    "downloadUrl": "https://cdn.example.com/...",
    "expiresAt": "2026-02-22T12:00:00Z"
}

업로드 완료

POST /api/upload/complete

파일 업로드가 완료되었음을 플랫폼에 알려 처리를 시작하도록 합니다.

본문:

{
    "datasetId": "abc123",
    "objectPath": "datasets/abc123/images/my-image.jpg",
    "filename": "my-image.jpg",
    "contentType": "image/jpeg",
    "size": 5242880
}

API 키 API

프로그래밍 방식의 액세스를 위해 API 키를 관리합니다. API 키 문서를 참조하십시오.

API 키 목록

GET /api/api-keys

API 키 생성

POST /api/api-keys

본문:

{
    "name": "training-server"
}

API 키 삭제

DELETE /api/api-keys

쿼리 매개변수:

매개변수유형설명
keyIdstring취소할 API 키 ID

예시:

curl -X DELETE \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/api-keys?keyId=KEY_ID"

팀 및 멤버 API

팀 워크스페이스를 생성하고 멤버를 초대하며 협업을 위한 역할을 관리합니다. 팀 문서를 참조하십시오.

팀 목록

GET /api/teams

팀 생성

POST /api/teams/create

본문:

{
    "username": "my-team",
    "fullName": "My Team"
}

멤버 목록

GET /api/members

현재 워크스페이스의 멤버를 반환합니다.

멤버 초대

POST /api/members

본문:

{
    "email": "user@example.com",
    "role": "editor"
}
멤버 역할
역할권한
viewer워크스페이스 리소스에 대한 읽기 전용 액세스
editor리소스 생성, 편집 및 삭제
admin멤버, 청구 및 모든 리소스 관리 (팀 소유자만 할당 가능)

owner는 생성자이며 초대할 수 없습니다. 소유자는 POST /api/members/transfer-ownership을 통해 별도로 이전됩니다. 전체 역할 정보는 을 참조하십시오.

멤버 역할 업데이트

PATCH /api/members/{userId}

멤버 제거

DELETE /api/members/{userId}

소유권 이전

POST /api/members/transfer-ownership

초대

초대 수락

POST /api/invites/accept

초대 정보 가져오기

GET /api/invites/info

쿼리 매개변수:

매개변수유형설명
tokenstring초대 토큰

초대 취소

DELETE /api/invites/{inviteId}

초대 재전송

POST /api/invites/{inviteId}/resend

탐색 API

커뮤니티에서 공유한 공개 데이터셋 및 프로젝트를 검색하고 둘러봅니다. 탐색 문서를 참조하십시오.

공개 콘텐츠 검색

GET /api/explore/search

쿼리 매개변수:

매개변수유형설명
qstring검색 쿼리
typestring리소스 유형: all (기본값), projects, datasets
sortstring정렬 순서: stars (기본값), newest, oldest, name-asc, name-desc, count-desc, count-asc
offsetint페이지네이션 오프셋 (기본값: 0). 결과는 페이지당 20개 항목을 반환합니다.

사이드바 데이터

GET /api/explore/sidebar

탐색 사이드바를 위한 큐레이션된 콘텐츠를 반환합니다.


사용자 및 설정 API

프로필, API 키, 스토리지 사용량 및 데이터 개인정보 보호 설정을 관리합니다. 설정 문서를 참조하십시오.

사용자 이름으로 사용자 가져오기

GET /api/users

쿼리 매개변수:

매개변수유형설명
usernamestring조회할 사용자 이름

사용자 팔로우 또는 팔로우 취소

PATCH /api/users

본문:

{
    "username": "target-user",
    "followed": true
}

사용자 이름 사용 가능 여부 확인

GET /api/username/check

쿼리 매개변수:

매개변수유형설명
usernamestring확인할 사용자 이름
suggestbool선택 사항: true로 설정 시 사용 중인 경우 제안을 포함합니다

설정

GET /api/settings
POST /api/settings

사용자 프로필 설정(표시 이름, 소개, 소셜 링크 등)을 가져오거나 업데이트합니다.

프로필 아이콘

POST /api/settings/icon
DELETE /api/settings/icon

프로필 아바타를 업로드하거나 제거합니다.

온보딩

POST /api/onboarding

온보딩 흐름 완료 (데이터 지역, 사용자 이름 설정).


GDPR API

모든 데이터의 내보내기를 요청하거나 계정을 영구적으로 삭제합니다. 설정 문서를 참조하십시오.

GDPR 작업 상태 가져오기

GET /api/gdpr

쿼리 매개변수:

매개변수유형설명
jobIdstring확인할 GDPR 작업 ID

작업 상태를 반환합니다. 완료된 내보내기 작업의 경우 응답에 downloadUrl이 포함됩니다.

내보내기 시작 또는 삭제 흐름

POST /api/gdpr

본문:

{
    "action": "export"
}
{
    "action": "delete",
    "confirmationWord": "DELETE"
}

팀 워크스페이스의 경우 선택 사항:

{
    "action": "delete",
    "confirmationWord": "DELETE",
    "teamUsername": "my-team"
}
되돌릴 수 없는 작업

계정 삭제는 영구적이며 되돌릴 수 없습니다. 모든 데이터, 모델 및 배포가 삭제됩니다.


오류 코드

코드HTTP 상태설명
UNAUTHORIZED401유효하지 않거나 누락된 API 키
FORBIDDEN403권한 부족
NOT_FOUND404리소스 찾을 수 없음
VALIDATION_ERROR400유효하지 않은 요청 데이터
RATE_LIMITED429너무 많은 요청
INTERNAL_ERROR500서버 오류

Python 통합

더 쉬운 통합을 위해 인증, 업로드, 실시간 메트릭 스트리밍을 자동으로 처리하는 Ultralytics Python 패키지를 사용하십시오.

설치 및 설정

pip install ultralytics

설치 확인:

yolo check
패키지 버전 요구 사항

플랫폼 통합을 위해서는 ultralytics>=8.4.35가 필요합니다. 하위 버전은 플랫폼과 작동하지 않습니다.

인증

yolo settings api_key=YOUR_API_KEY

플랫폼 데이터셋 사용

ul:// URI로 데이터셋 참조:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Train on your Platform dataset
model.train(
    data="ul://your-username/datasets/your-dataset",
    epochs=100,
    imgsz=640,
)

URI 형식:

패턴설명
ul://username/datasets/slug데이터셋
ul://username/project-name프로젝트
ul://username/project/model-name특정 모델
ul://ultralytics/yolo26/yolo26n공식 모델

플랫폼으로 푸시

결과를 플랫폼 프로젝트로 전송:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Results automatically sync to Platform
model.train(
    data="coco8.yaml",
    epochs=100,
    project="your-username/my-project",
    name="experiment-1",
)

동기화 항목:

  • 학습 메트릭 (실시간)
  • 최종 모델 가중치
  • 검증 플롯
  • 콘솔 출력
  • 시스템 메트릭

API 예시

플랫폼에서 모델 로드:

# Your own model
model = YOLO("ul://username/project/model-name")

# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")

추론 실행:

results = model("image.jpg")

# Access results
for r in results:
    boxes = r.boxes  # Detection boxes
    masks = r.masks  # Segmentation masks
    keypoints = r.keypoints  # Pose keypoints
    probs = r.probs  # Classification probabilities

모델 내보내기:

# Export to ONNX
model.export(format="onnx", imgsz=640, half=True)

# Export to TensorRT
model.export(format="engine", imgsz=640, half=True)

# Export to CoreML
model.export(format="coreml", imgsz=640)

검증:

metrics = model.val(data="ul://username/datasets/my-dataset")

print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")

웹훅

플랫폼은 내부 웹훅을 사용하여 ultralytics Python SDK(클라우드 GPU 또는 원격/로컬 머신에서 실행)로부터 실시간 학습 메트릭(에포크별 손실, mAP, 시스템 통계 및 완료 상태)을 플랫폼으로 다시 스트리밍합니다. 이러한 웹훅은 학습 작업별로 제공되는 HMAC webhookSecret을 통해 인증되며, 사용자 애플리케이션에서 소비하도록 설계되지 않았습니다.

사용자 측 작업

모든 플랜: ultralytics SDK를 통한 학습 진행 상황(실시간 메트릭, 완료 알림)은 모든 플랜에서 자동으로 작동합니다. 학습 시 project=username/my-project name=my-run을 설정하기만 하면 SDK가 이벤트를 플랫폼으로 다시 스트리밍합니다. 사용자 측 웹훅 등록은 필요하지 않습니다.

사용자 대상 웹훅 구독(사용자가 제어하는 URL로의 POST 콜백)은 Enterprise 로드맵에 있으며 현재는 사용할 수 없습니다. 그동안 상태를 확인하려면 GET /api/models/{modelId}/training을 폴링하거나 UI의 활동 피드를 사용하십시오.


FAQ

대규모 결과를 페이지로 나누려면 어떻게 해야 합니까?

대부분의 엔드포인트는 요청당 반환되는 결과 수를 제어하기 위해 limit 매개변수를 사용합니다:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/datasets?limit=50"

활동 및 휴지통 엔드포인트는 페이지 기반 페이지네이션을 위해 page 매개변수도 지원합니다:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://platform.ultralytics.com/api/activity?page=2&limit=20"

The Explore Search endpoint uses offset instead of page, with a fixed page size of 20:

curl "https://platform.ultralytics.com/api/explore/search?type=datasets&offset=20&sort=stars"

SDK 없이 API를 사용할 수 있습니까?

네, 모든 기능은 REST를 통해 사용할 수 있습니다. Python SDK는 실시간 메트릭 스트리밍 및 자동 모델 업로드와 같은 기능을 추가하는 편의 도구입니다. 또한 platform.ultralytics.com/api/docs에서 모든 엔드포인트를 대화형으로 탐색할 수 있습니다.

API 클라이언트 라이브러리가 있습니까?

현재는 Ultralytics Python 패키지를 사용하거나 직접 HTTP 요청을 수행하십시오. 다른 언어에 대한 공식 클라이언트 라이브러리는 계획 중입니다.

요청 제한은 어떻게 처리합니까?

429 응답의 Retry-After 헤더를 사용하여 적절한 시간 동안 기다리십시오:

import time

import requests

def api_request_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code != 429:
            return response
        wait = int(response.headers.get("Retry-After", 2**attempt))
        time.sleep(wait)
    raise Exception("Rate limit exceeded")

모델 또는 데이터셋 ID는 어떻게 찾습니까?

리소스 ID는 API를 통해 리소스를 생성할 때 반환됩니다. 플랫폼 URL에서도 확인할 수 있습니다:

https://platform.ultralytics.com/username/project/model-name
                                  ^^^^^^^^ ^^^^^^^ ^^^^^^^^^^
                                  username project   model

이름으로 검색하거나 프로젝트별로 필터링하려면 목록 엔드포인트를 사용하십시오.

댓글