jpskill.com
🛠️ 開発・MCP コミュニティ

terra-auth

Terra APIの認証、APIキー管理、開発/テスト/本番環境設定を支援し、Terra連携の準備、Widgetセッション作成などをスムーズに行えるようにするSkill。

📜 元の英語説明(参考)

Terra API authentication, credentials management, and environment configuration. Use when setting up Terra integration, managing API keys, generating widget sessions, or configuring testing/staging/production environments.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Terra APIの認証、APIキー管理、開発/テスト/本番環境設定を支援し、Terra連携の準備、Widgetセッション作成などをスムーズに行えるようにするSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o terra-auth.zip https://jpskill.com/download/9510.zip && unzip -o terra-auth.zip && rm terra-auth.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9510.zip -OutFile "$d\terra-auth.zip"; Expand-Archive "$d\terra-auth.zip" -DestinationPath $d -Force; ri "$d\terra-auth.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して terra-auth.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → terra-auth フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Terra 認証とクレデンシャル

テスト、ステージング、および本番環境全体で Terra API 認証を管理します。

クレデンシャルファイル

クレデンシャルは、環境固有の .env ファイルに保存されます。

環境 ファイル
Testing .env.terra.testing
Staging .env.terra.staging
Production .env.terra.production

クレデンシャルのロード:

from dotenv import load_dotenv
import os

# 特定の環境をロード
load_dotenv(".env.terra.testing")

dev_id = os.getenv("TERRA_DEV_ID")
api_key = os.getenv("TERRA_API_KEY")

またはヘルパーを使用:

from scripts.terra_client import get_terra_client

client = get_terra_client("testing")  # または "staging", "production"

クイックスタート

Python SDK のセットアップ

from terra import Terra

# Testing 環境
client = Terra(
    dev_id="botaniqalmedtech-testing-SjyfjtG33s",
    api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)

# 接続の確認
integrations = client.integrations.fetch()
print(f"Connected! {len(integrations.integrations)} providers available")

環境変数

# .env.testing
TERRA_DEV_ID=botaniqalmedtech-testing-SjyfjtG33s
TERRA_API_KEY=_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc

# .env.staging
TERRA_DEV_ID=botaniqalmedtech-staging-uGKHOPRCi1
TERRA_API_KEY=fJia30spa-EqB_CMqZBzzrkMWZ_u2pv_

# .env.production
TERRA_DEV_ID=botaniqalmedtech-prod-yrc99AwsT2
TERRA_API_KEY=Il4YUTc-e00EcvKGUx63j7YE3MJ-7QIz

操作

setup-environment

特定の環境に対して Terra クレデンシャルを設定します。

Python:

import os
from terra import Terra

def get_terra_client(env: str = "testing") -> Terra:
    """指定された環境の Terra クライアントを取得します。"""
    configs = {
        "testing": {
            "dev_id": "botaniqalmedtech-testing-SjyfjtG33s",
            "api_key": "_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
        },
        "staging": {
            "dev_id": "botaniqalmedtech-staging-uGKHOPRCi1",
            "api_key": "fJia30spa-EqB_CMqZBzzrkMWZ_u2pv_"
        },
        "production": {
            "dev_id": "botaniqalmedtech-prod-yrc99AwsT2",
            "api_key": "Il4YUTc-e00EcvKGUx63j7YE3MJ-7QIz"
        }
    }

    config = configs.get(env)
    if not config:
        raise ValueError(f"Unknown environment: {env}")

    return Terra(dev_id=config["dev_id"], api_key=config["api_key"])

# 使用例
client = get_terra_client("testing")

generate-widget-session

エンドユーザー向けの認証ウィジェット URL を作成します。

Python:

def generate_widget_session(
    client: Terra,
    reference_id: str,
    success_url: str,
    failure_url: str,
    providers: list[str] = None
) -> str:
    """ユーザー認証用のウィジェットセッション URL を生成します。"""

    response = client.authentication.generatewidgetsession(
        reference_id=reference_id,
        auth_success_redirect_url=success_url,
        auth_failure_redirect_url=failure_url,
        providers=providers  # オプション: プロバイダーをフィルタリング ["FITBIT", "GARMIN"]
    )

    return response.url

# 使用例
widget_url = generate_widget_session(
    client=client,
    reference_id="user_12345",  # 内部ユーザー ID
    success_url="https://app.botaniqal.com/terra/success",
    failure_url="https://app.botaniqal.com/terra/failure"
)
print(f"Redirect user to: {widget_url}")

レスポンス:

{
  "url": "https://widget.tryterra.co/session/abc123...",
  "session_id": "abc123...",
  "expires_at": "2025-12-05T12:15:00Z"
}

generate-mobile-token

モバイル SDK 用の認証トークンを生成します。

Python:

def generate_mobile_token(client: Terra) -> str:
    """モバイル SDK の初期化用のトークンを生成します。

    注: トークンはアカウントに対して生成され、ユーザーごとではありません。
    ユーザーを識別するには、モバイル SDK の init で reference_id を使用します。
    """
    response = client.authentication.generateauthtoken()
    return response.token

# 使用例 (バックエンドエンドポイント)
@app.route("/api/terra/mobile-token", methods=["POST"])
@login_required
def get_mobile_token():
    token = generate_mobile_token(client=terra_client)
    # reference_id はトークン生成ではなく、モバイル SDK に渡します
    return jsonify({
        "token": token,
        "reference_id": str(current_user.id)  # SDK init 用
    })

トークンの有効期限: 180 秒 (3 分)、1 回限りの使用。

deauthenticate-user

ユーザーを削除し、データアクセスを取り消します。

Python:

def deauthenticate_user(client: Terra, user_id: str) -> bool:
    """ユーザーの認証を解除し、データを削除します。"""

    response = client.authentication.deauthenticateuser(user_id=user_id)
    return response.success

# 使用例
success = deauthenticate_user(client, "terra_user_abc123")
if success:
    print("User deauthenticated successfully")

list-integrations

利用可能なすべてのプロバイダー統合を取得します。

Python:

def list_integrations(client: Terra) -> list:
    """利用可能なすべての Terra 統合をリストします。"""

    response = client.integrations.fetch()

    integrations = []
    for integration in response.integrations:
        integrations.append({
            "name": integration.name,
            "resource": integration.resource,
            "logo_url": integration.logo_url
        })

    return integrations

# 使用例
providers = list_integrations(client)
for p in providers:
    print(f"{p['name']}: {p['resource']}")

REST API ヘッダー

すべての REST API 呼び出しには、次のヘッダーが必要です。

dev-id: <YOUR_DEV_ID>
x-api-key: <YOUR_API_KEY>
Content-Type: application/json

cURL の例:

curl -X GET "https://api.tryterra.co/v2/integrations" \
  -H "dev-id: botaniqalmedtech-testing-SjyfjtG33s" \
  -H "x-api-key: _W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"

セキュリティのベストプラクティス

  1. フロントエンド/モバイルアプリで API キーを公開しないでください
  2. クレデンシャルには環境変数を使用してください
  3. バックエンドでのみモバイルトークンを生成してください
  4. すべてのリダイレクト URL には HTTPS を使用してください
  5. 侵害された場合は キーをローテーションしてください (Terra サポートにお問い合わせください)
  6. 環境ごとに異なるキー

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Terra Authentication & Credentials

Manage Terra API authentication across testing, staging, and production environments.

Credential Files

Credentials are stored in environment-specific .env files:

Environment File
Testing .env.terra.testing
Staging .env.terra.staging
Production .env.terra.production

Load credentials:

from dotenv import load_dotenv
import os

# Load specific environment
load_dotenv(".env.terra.testing")

dev_id = os.getenv("TERRA_DEV_ID")
api_key = os.getenv("TERRA_API_KEY")

Or use the helper:

from scripts.terra_client import get_terra_client

client = get_terra_client("testing")  # or "staging", "production"

Quick Start

Python SDK Setup

from terra import Terra

# Testing environment
client = Terra(
    dev_id="botaniqalmedtech-testing-SjyfjtG33s",
    api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)

# Verify connection
integrations = client.integrations.fetch()
print(f"Connected! {len(integrations.integrations)} providers available")

Environment Variables

# .env.testing
TERRA_DEV_ID=botaniqalmedtech-testing-SjyfjtG33s
TERRA_API_KEY=_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc

# .env.staging
TERRA_DEV_ID=botaniqalmedtech-staging-uGKHOPRCi1
TERRA_API_KEY=fJia30spa-EqB_CMqZBzzrkMWZ_u2pv_

# .env.production
TERRA_DEV_ID=botaniqalmedtech-prod-yrc99AwsT2
TERRA_API_KEY=Il4YUTc-e00EcvKGUx63j7YE3MJ-7QIz

Operations

setup-environment

Configure Terra credentials for specific environment.

Python:

import os
from terra import Terra

def get_terra_client(env: str = "testing") -> Terra:
    """Get Terra client for specified environment."""
    configs = {
        "testing": {
            "dev_id": "botaniqalmedtech-testing-SjyfjtG33s",
            "api_key": "_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
        },
        "staging": {
            "dev_id": "botaniqalmedtech-staging-uGKHOPRCi1",
            "api_key": "fJia30spa-EqB_CMqZBzzrkMWZ_u2pv_"
        },
        "production": {
            "dev_id": "botaniqalmedtech-prod-yrc99AwsT2",
            "api_key": "Il4YUTc-e00EcvKGUx63j7YE3MJ-7QIz"
        }
    }

    config = configs.get(env)
    if not config:
        raise ValueError(f"Unknown environment: {env}")

    return Terra(dev_id=config["dev_id"], api_key=config["api_key"])

# Usage
client = get_terra_client("testing")

generate-widget-session

Create authentication widget URL for end users.

Python:

def generate_widget_session(
    client: Terra,
    reference_id: str,
    success_url: str,
    failure_url: str,
    providers: list[str] = None
) -> str:
    """Generate widget session URL for user authentication."""

    response = client.authentication.generatewidgetsession(
        reference_id=reference_id,
        auth_success_redirect_url=success_url,
        auth_failure_redirect_url=failure_url,
        providers=providers  # Optional: filter providers ["FITBIT", "GARMIN"]
    )

    return response.url

# Usage
widget_url = generate_widget_session(
    client=client,
    reference_id="user_12345",  # Your internal user ID
    success_url="https://app.botaniqal.com/terra/success",
    failure_url="https://app.botaniqal.com/terra/failure"
)
print(f"Redirect user to: {widget_url}")

Response:

{
  "url": "https://widget.tryterra.co/session/abc123...",
  "session_id": "abc123...",
  "expires_at": "2025-12-05T12:15:00Z"
}

generate-mobile-token

Generate authentication token for mobile SDK.

Python:

def generate_mobile_token(client: Terra) -> str:
    """Generate token for mobile SDK initialization.

    Note: Token is generated for the account, not per-user.
    Use reference_id in the mobile SDK init to identify users.
    """
    response = client.authentication.generateauthtoken()
    return response.token

# Usage (backend endpoint)
@app.route("/api/terra/mobile-token", methods=["POST"])
@login_required
def get_mobile_token():
    token = generate_mobile_token(client=terra_client)
    # Pass reference_id to mobile SDK, not to token generation
    return jsonify({
        "token": token,
        "reference_id": str(current_user.id)  # For SDK init
    })

Token Expiration: 180 seconds (3 minutes), one-time use.

deauthenticate-user

Remove user and revoke data access.

Python:

def deauthenticate_user(client: Terra, user_id: str) -> bool:
    """Deauthenticate user and remove their data."""

    response = client.authentication.deauthenticateuser(user_id=user_id)
    return response.success

# Usage
success = deauthenticate_user(client, "terra_user_abc123")
if success:
    print("User deauthenticated successfully")

list-integrations

Get all available provider integrations.

Python:

def list_integrations(client: Terra) -> list:
    """List all available Terra integrations."""

    response = client.integrations.fetch()

    integrations = []
    for integration in response.integrations:
        integrations.append({
            "name": integration.name,
            "resource": integration.resource,
            "logo_url": integration.logo_url
        })

    return integrations

# Usage
providers = list_integrations(client)
for p in providers:
    print(f"{p['name']}: {p['resource']}")

REST API Headers

All REST API calls require these headers:

dev-id: <YOUR_DEV_ID>
x-api-key: <YOUR_API_KEY>
Content-Type: application/json

cURL Example:

curl -X GET "https://api.tryterra.co/v2/integrations" \
  -H "dev-id: botaniqalmedtech-testing-SjyfjtG33s" \
  -H "x-api-key: _W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"

Security Best Practices

  1. Never expose API keys in frontend/mobile apps
  2. Use environment variables for credentials
  3. Generate mobile tokens on backend only
  4. Use HTTPS for all redirect URLs
  5. Rotate keys if compromised (contact Terra support)
  6. Different keys per environment (testing/staging/production)

Webhook Signing Secret

Each environment has a unique signing secret for webhook verification:

  • Found in Terra Dashboard → Destinations → Webhooks
  • Used for HMAC-SHA256 signature verification
  • See terra-webhooks skill for implementation

Session Lifecycle

Token Type Expiration Notes
Widget Session 15 minutes URL valid until used or expired
Mobile SDK Token 3 minutes One-time use, generate per connection
OAuth Tokens Auto-refresh Terra manages automatically
API Keys Never Rotate manually if needed

API Base URLs

Environment Base URL
Production API https://api.tryterra.co
Widget https://widget.tryterra.co
Streaming wss://streaming.tryterra.co

Related Skills

  • terra-connections: Connect users to wearables
  • terra-data: Retrieve health data
  • terra-webhooks: Handle real-time events
  • terra-sdk: SDK integration patterns