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本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
terra-auth.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
terra-authフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
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"
セキュリティのベストプラクティス
- フロントエンド/モバイルアプリで API キーを公開しないでください
- クレデンシャルには環境変数を使用してください
- バックエンドでのみモバイルトークンを生成してください
- すべてのリダイレクト URL には HTTPS を使用してください
- 侵害された場合は キーをローテーションしてください (Terra サポートにお問い合わせください)
- 環境ごとに異なるキー
(原文がここで切り詰められています)
📜 原文 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
- Never expose API keys in frontend/mobile apps
- Use environment variables for credentials
- Generate mobile tokens on backend only
- Use HTTPS for all redirect URLs
- Rotate keys if compromised (contact Terra support)
- 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-webhooksskill 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