> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qumo-deploy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# クイックスタート

> Node.js、Bun、Deno で @qumo-deploy/sdk を使い始めます。

# TypeScript SDK クイックスタート

公式の `@qumo-deploy/sdk` パッケージを使うと、Qumo Deploy のコントロールプレーンを、強く型付けされたコードから余すところなく操作できます。

## インストール

SDK は [JSR](https://jsr.io/@qumo-deploy/sdk) で公開されています。どのパッケージマネージャーも
JSR からインストールし、インポート名はいずれの場合も `@qumo-deploy/sdk` です。

```bash npm theme={null}
npx jsr add @qumo-deploy/sdk
```

```bash pnpm theme={null}
pnpm dlx jsr add @qumo-deploy/sdk
```

```bash yarn theme={null}
yarn dlx jsr add @qumo-deploy/sdk
```

```bash bun theme={null}
bunx jsr add @qumo-deploy/sdk
```

```bash Deno theme={null}
deno add jsr:@qumo-deploy/sdk
```

***

## クライアントの初期化

ベース URL とクレデンシャルを渡して `QumoClient` のインスタンスを作成します。

```typescript theme={null}
import { QumoClient } from "@qumo-deploy/sdk";

// パーソナルアクセストークンまたはアイデンティティトークンで初期化する
const client = new QumoClient({
  baseUrl: process.env.QUMO_BASE_URL || "https://api.qumo-deploy.com",
  token: process.env.QUMO_TOKEN, // 例: "qumo_pat_..."
});
```

### 認証モード

クライアントは 2 種類の認証方式に対応しています。

1. **Bearer トークン（`token`）**: スクリプトや CI/CD 向けです。パーソナルアクセストークン（`qumo_pat_...`）またはアイデンティティトークンを渡します。`Authorization: Bearer <token>` を送信します。
2. **セッション Cookie + CSRF（`csrfToken`）**: コンソールと同じオリジンで動き、セッション Cookie があるブラウザのコード向けです。`api.qumo-deploy.com` は Cookie を無視するため、`baseUrl` には空文字列（同一オリジン）を指定します。`qumo_csrf_token` Cookie の値を返すコールバックを渡すと、クライアントは変更系リクエストでそれを `X-CSRF-Token` として送信します。

```typescript theme={null}
const browserClient = new QumoClient({
  baseUrl: "",
  csrfToken: () => getCookie("qumo_csrf_token"),
});
```

***

## 最初の API 呼び出し: 組織とプロジェクトの取得

このサンプルにはパーソナルアクセストークンが必要です。アイデンティティトークンはユーザーではなくプロジェクトに属するため、
所属組織の一覧取得は `401` で拒否されます。

```typescript theme={null}
import { QumoClient } from "@qumo-deploy/sdk";

async function main() {
  const client = new QumoClient({
    baseUrl: "https://api.qumo-deploy.com",
    token: process.env.QUMO_TOKEN,
  });

  // 所属している組織。パーソナルトークンは組織を
  // 特定しないため、1 つ選んでその id を渡す
  const memberships = await client.auth.getMemberships();
  const organization = memberships[0];
  console.log(`Organization: ${organization.organization_name} (role ${organization.role_id})`);

  // その組織のプロジェクトを一覧表示する
  const projects = await client.projects.list({ organization_id: organization.organization_id });
  console.log(`Found ${projects.length} projects:`);
  for (const p of projects) {
    console.log(` - ${p.name} [${p.environment}] (ID: ${p.id})`);
  }
}

main().catch(console.error);
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.