세분화된 청구 가능 사용량

세분화된 청구 가능 사용량

워크스페이스, 프로젝트, 사용자, 또는 API 키별로 분류된 상세 트레이스 및 LangSmith Deployment 사용량 데이터를 가져와요.

참고: 트레이스 사용량: LangSmith 클라우드의 경우 세분화된 청구 가능 트레이스 데이터 수집은 2026년 1월 5일에 시작됐어요. 그 이전에 수집된 트레이스에 대해서는 데이터를 사용할 수 없어요.

셀프 호스팅 인스턴스의 경우, 다음 환경 변수를 통해 기능을 활성화하거나 기본 활성화된 버전으로 업그레이드한 후에 트레이스 데이터 수집이 시작돼요.

DEFAULT_ORG_FEATURE_ENABLE_GRANULAR_USAGE_REPORTING=true
GRANULAR_USAGE_TABLE_ENABLED=true

셀프 호스팅 버전 0.16.0부터 셀프 호스팅 배포에서는 장기 보존(long-lived) 트레이스 사용량을 더 이상 추적하지 않아요. 이러한 배포에서 Long-lived only 보존 필터는 항상 0건을 표시해요.

LangSmith Deployment 사용량은 별도의 데이터 소스를 사용해요. 자세한 내용은 LangSmith Deployment 섹션을 참고해요.

LangSmith는 워크스페이스, 프로젝트, 사용자 또는 API 키별로 분류된 상세 사용량 데이터를 가져올 수 있는 세분화된 청구 가능 사용량 API를 제공해요. 동일한 엔드포인트에서 kind 쿼리 파라미터로 선택되는 두 개의 청구 가능 도메인이 지원돼요:

  • 트레이스 사용량 (kind=traces, 기본): 수집된 트레이스 수.
  • LangSmith Deployment 사용량 (kind=langsmith_deployments): LangSmith Deployment에 대한 실행된 노드, 에이전트 런, 에이전트 업타임.

두 종류 모두 동일한 쿼리 파라미터(시간 범위, 워크스페이스 필터, 그룹화 차원)를 공유하고 동일한 시간 버킷 형식을 반환해요. 데이터 소스는 별개이므로 한 종류가 반환한 레코드는 다른 종류에 나타나지 않아요.

이러한 API를 사용해 다음을 할 수 있어요:

  • 서로 다른 팀 또는 워크스페이스 간 사용량 추적.
  • 어떤 사용자 또는 API 키가 가장 많은 트레이스를 소비하거나 에이전트를 실행하는지 식별.
  • 시간에 따른 사용 패턴 분석.
  • 내부 보고를 위한 사용량 데이터 내보내기.

출처: 문서

본문

사전 요구사항

  • 세분화된 사용량 데이터에 접근하려면 organization:read 권한이 있어야 해요.
  • 읽기 접근 권한이 있는 워크스페이스의 사용량만 볼 수 있어요.

UI에서 보기

LangSmith UI에서도 세분화된 사용량 데이터를 볼 수 있어요:

  1. Settings > Billing and Usage로 이동해요.
  2. Granular Usage 탭을 선택해요.
  3. LangSmith TracesLangSmith Deployments 하위 탭을 전환해 각 도메인을 확인해요. 활성 하위 탭은 URL(?tab=traces 또는 ?tab=deployments)에 반영되므로 페이지를 북마크해 같은 보기로 이동할 수 있어요.
  4. 컨트롤을 사용해:
    • 시간 범위 선택 (Last 7 days, 30 days, 3 months, 6 months, 1 year, 또는 custom)
    • 워크스페이스, 프로젝트, 사용자, 또는 API 키별 그룹화
    • 특정 워크스페이스로 필터링
    • LangSmith Traces 탭에서 보존 계층으로 선택적 필터링 (All Retention / Long-lived only / Short-lived only)
  5. Export CSV를 클릭해 활성 탭의 데이터를 다운로드해요.

시간 범위와 워크스페이스 필터는 두 하위 탭에 걸쳐 공유되며, 탭을 전환해도 선택한 내용이 유지돼요. LangSmith Deployments 탭은 세 개의 지표가 서로 다른 단위를 사용하므로 세 개의 통계 카드(전체 실행 노드 수 / 전체 에이전트 런 수 / 전체 에이전트 업타임(초))와 지표별 차트 하나를 세로로 쌓아 표시해요.

쿼리 파라미터

세분화된 사용량 엔드포인트는 다음 쿼리 파라미터를 받아요:

파라미터 타입 필수 설명
start_time datetime 시간 범위의 시작 (ISO 8601 형식).
end_time datetime 시간 범위의 끝. start_time 이후여야 해요.
workspace_ids array of UUIDs 결과를 특정 워크스페이스로 필터링.
kind string 아니오 traces(기본) 또는 langsmith_deployments. 청구 가능 도메인 선택.
group_by string 아니오 그룹화할 차원. workspace, project, user, api_key 중 하나. 기본: workspace.
trace_tier string 아니오 트레이스 전용 보존 필터: longlived 또는 shortlived. 전체 보존을 위해 생략. kind=langsmith_deployments일 때는 무시됨.

일 단위 계약

사용량 데이터는 일 단위로 집계돼요. 엔드포인트는 API 계층에서 창을 일 단위로 정규화해요:

  • start_time은 해당 일의 UTC 자정으로 내림돼요.
  • end_time은 다음 UTC 자정으로 올림돼요(이미 자정이면 무변경).
  • 요청된 창과 겹치는 어떤 하루라도 전체 포함돼요.

따라서 2026-01-01T12:00:00Z부터 2026-01-02T12:00:00Z까지의 24시간 창은 1월 1일과 1월 2일 전체 버킷에 대한 사용량을 반환해요.

Stride

각 응답의 stride 필드는 요청된 시간 범위에서 계산된 집계에 사용된 시간 버킷 크기를 나타내요. 일이 최소이며, 하루 미만의 창도 하루 단위로 버킷팅돼요.

시간 범위 집계 Stride
최대 31일 Daily days: 1
32–93일 (~3개월) Weekly days: 7
94–366일 (~1년) Monthly days: 30
366일 초과 Yearly days: 365

호환성

kind=langsmith_deploymentsgroup_by=trace_tier를 함께 사용하면 400 Bad Request를 반환해요. 보존 계층은 트레이스에만 적용돼요.

API 엔드포인트

GET /api/v1/orgs/current/billing/granular-usage

kind를 생략한 기존 호출자는 항상 그래왔던 것과 동일한 응답 형태로 트레이스 사용량을 계속 받아요.

트레이스 사용량 (kind=traces)

응답

{
  "stride": {
    "days": 1,
    "hours": 0
  },
  "usage": [
    {
      "time_bucket": "2026-01-15T00:00:00Z",
      "dimensions": {
        "workspace_id": "uuid",
        "workspace_name": "My Workspace"
      },
      "traces": 1500
    }
  ]
}

예시: 워크스페이스별 트레이스 사용량 가져오기

```python Python import httpx from datetime import datetime, timedelta, timezone

client = httpx.Client( base_url="https://api.smith.langchain.com", headers={"x-api-key": ""} )

end_time = datetime.now(timezone.utc) start_time = end_time - timedelta(days=30)

response = client.get( "/api/v1/orgs/current/billing/granular-usage", params={ "start_time": start_time.isoformat(), "end_time": end_time.isoformat(), "workspace_ids": [""], "group_by": "workspace", }, )

data = response.json() for record in data["usage"]: print(f"{record['time_bucket']}: {record['traces']} traces")


```typescript TypeScript
const response = await fetch(
  `https://api.smith.langchain.com/api/v1/orgs/current/billing/granular-usage?` +
  new URLSearchParams({
    start_time: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
    end_time: new Date().toISOString(),
    workspace_ids: "<workspace-id>",
    group_by: "workspace",
  }),
  {
    headers: {
      "x-api-key": "<your-api-key>",
    },
  }
);

const data = await response.json();
for (const record of data.usage) {
  console.log(`${record.time_bucket}: ${record.traces} traces`);
}
curl -X GET "https://api.smith.langchain.com/api/v1/orgs/current/billing/granular-usage?\
start_time=2026-01-01T00:00:00Z&\
end_time=2026-01-15T00:00:00Z&\
workspace_ids=<workspace-id>&\
group_by=workspace" \
  -H "x-api-key: ***

예시: 사용자별 트레이스 사용량을 장기 보존 전용으로 필터링해 가져오기

```python Python response = client.get( "/api/v1/orgs/current/billing/granular-usage", params={ "start_time": start_time.isoformat(), "end_time": end_time.isoformat(), "workspace_ids": [""], "group_by": "user", "trace_tier": "longlived", }, )

data = response.json() for record in data["usage"]: user_email = record["dimensions"].get("user_email", "Unknown") print(f"{user_email}: {record['traces']} long-lived traces")

</CodeGroup>

### LangSmith Deployment 사용량 (`kind=langsmith_deployments`)

각 레코드는 세 가지 지표를 함께 담으므로 단일 가져오기로 전체 Deployment 보기를 지원해요.

> **참고:** **LangSmith Deployment 사용량**은 트레이스 사용량과 별도로 소싱되며, 배포 사용량의 전체 보존 기간 동안 사용할 수 있어요.
>
> 셀프 호스팅 인스턴스의 경우 Deployment 사용량 엔드포인트는 옵트인 방식이에요. 다음과 같이 활성화해요:
>
> ```env
> REMOTE_METRICS_ROLLUP_ENABLED=true
> ```
>
> 또는 기본 활성화된 LangSmith 버전으로 업그레이드해요(셀프 호스팅 [changelog](/langsmith/self-hosted-changelog) 참조).

#### 응답

```json
{
"stride": {
  "days": 1,
  "hours": 0
},
"usage": [
  {
    "time_bucket": "2026-01-15T00:00:00Z",
    "dimensions": {
      "workspace_id": "uuid",
      "workspace_name": "My Workspace"
    },
    "nodes_executed": 12500,
    "agent_runs": 320,
    "agent_uptime_seconds": 86400
  }
]
}
필드 설명
nodes_executed 시간 버킷에서 실행된 총 LangGraph 노드 수.
agent_runs 시간 버킷에서의 총 에이전트 런(그래프 호출) 수.
agent_uptime_seconds 배포 레플리카에 걸쳐 합산된 총 레플리카 업타임(초). 청구에 사용되는 중복 제거된 대기 시간은 청구 파이프라인이 별도로 계산해요. 이 필드는 분류 및 분석을 위해 드러낸 원시 합계예요.

예시: 워크스페이스별 Deployment 사용량 가져오기

```python Python response = client.get( "/api/v1/orgs/current/billing/granular-usage", params={ "kind": "langsmith_deployments", "start_time": start_time.isoformat(), "end_time": end_time.isoformat(), "workspace_ids": [""], "group_by": "workspace", }, )

data = response.json() for record in data["usage"]: print( f"{record['time_bucket']}: " f"{record['nodes_executed']} nodes, " f"{record['agent_runs']} runs, " f"{record['agent_uptime_seconds']}s uptime" )


```typescript TypeScript
const response = await fetch(
  `https://api.smith.langchain.com/api/v1/orgs/current/billing/granular-usage?` +
  new URLSearchParams({
    kind: "langsmith_deployments",
    start_time: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),
    end_time: new Date().toISOString(),
    workspace_ids: "<workspace-id>",
    group_by: "workspace",
  }),
  {
    headers: {
      "x-api-key": "<your-api-key>",
    },
  }
);

const data = await response.json();
for (const record of data.usage) {
  console.log(
    `${record.time_bucket}: ${record.nodes_executed} nodes, ` +
    `${record.agent_runs} runs, ${record.agent_uptime_seconds}s uptime`
  );
}
curl -X GET "https://api.smith.langchain.com/api/v1/orgs/current/billing/granular-usage?\
kind=langsmith_deployments&\
start_time=2026-01-01T00:00:00Z&\
end_time=2026-01-15T00:00:00Z&\
workspace_ids=<workspace-id>&\
group_by=workspace" \
  -H "x-api-key: ***

CSV 내보내기

GET /api/v1/orgs/current/billing/granular-usage/export

kind를 포함해 데이터 엔드포인트와 동일한 쿼리 파라미터를 받아요. (시간 버킷, 차원) 튜플당 한 행씩인 CSV 파일을 반환해요. 모든 차원 열은 항상 존재하며, 선택한 group_by와 일치하는 열만 채워져요.

kind=traces의 경우 값 열은 Traces예요. kind=langsmith_deployments의 경우 값 열은 Nodes Executed, Agent Runs, Agent Uptime (seconds)이에요.

존재 시점
Time Bucket Start 항상
Time Bucket End 항상
Workspace ID / Name 항상 (group_by=workspace일 때 채워짐)
Project ID / Name 항상 (group_by=project일 때 채워짐)
User ID / Email 항상 (group_by=user일 때 채워짐)
API Key Short Key 항상 (group_by=api_key일 때 채워짐)
Traces kind=traces
Nodes Executed / Agent Runs / Agent Uptime (seconds) kind=langsmith_deployments

값이 =, +, -, @, 탭, 또는 캐리지 리턴으로 시작하는 셀은 Excel / Google Sheets / LibreOffice에서 스프레드시트 수식 평가를 무력화하기 위해 탭이 접두사로 추가돼요.

```python Python response = client.get( "/api/v1/orgs/current/billing/granular-usage/export", params={ "kind": "langsmith_deployments", "start_time": start_time.isoformat(), "end_time": end_time.isoformat(), "workspace_ids": [""], "group_by": "workspace", }, )

with open("deployment_usage_report.csv", "wb") as f: f.write(response.content)


```bash cURL
curl -X GET "https://api.smith.langchain.com/api/v1/orgs/current/billing/granular-usage/export?\
kind=langsmith_deployments&\
start_time=2026-01-01T00:00:00Z&\
end_time=2026-01-15T00:00:00Z&\
workspace_ids=<workspace-id>&\
group_by=workspace" \
  -H "x-api-key: *** \
  -o deployment_usage_report.csv

그룹화 옵션

group_by 파라미터는 사용량 데이터가 어떻게 집계되는지를 결정해요:

설명 반환되는 차원 사용 가능 대상
workspace 워크스페이스별 그룹화 workspace_id, workspace_name 양쪽 종류
project 프로젝트별 그룹화 project_id, project_name 양쪽 종류
user 사용자별 그룹화 user_id, user_email 양쪽 종류
api_key API 키별 그룹화 api_key_short_key 양쪽 종류

트레이스 사용량에서 "프로젝트"는 LangSmith 트레이서 세션을 가리켜요. Deployment 사용량에서 "프로젝트"는 LangSmith Deployment 프로젝트(배포된 에이전트)를 가리켜요.

관련 리소스

더 알아보기 (Learn more)