terra-sdk
Python、JavaScriptなど多様な環境でTerraを実装する際に、SDKを選定したり、モバイルヘルスデータを連携したりするのを支援するSkill。
📜 元の英語説明(参考)
Terra SDK integration for Python, JavaScript, iOS, Android, React Native, and Flutter. Use when implementing Terra in applications, choosing SDKs, or integrating mobile health sources.
🇯🇵 日本人クリエイター向け解説
Python、JavaScriptなど多様な環境でTerraを実装する際に、SDKを選定したり、モバイルヘルスデータを連携したりするのを支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o terra-sdk.zip https://jpskill.com/download/9513.zip && unzip -o terra-sdk.zip && rm terra-sdk.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9513.zip -OutFile "$d\terra-sdk.zip"; Expand-Archive "$d\terra-sdk.zip" -DestinationPath $d -Force; ri "$d\terra-sdk.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
terra-sdk.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
terra-sdkフォルダができる - 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 SDK 連携
すべてのプラットフォームにおける Terra API 連携のための完全な SDK リファレンスです。
SDK 概要
| SDK | プラットフォーム | パッケージ | ユースケース |
|---|---|---|---|
| Python | バックエンド | terra-python |
サーバーサイドの API 呼び出し |
| JavaScript | バックエンド/Node | terra-api |
Node.js, Deno, Bun |
| iOS | モバイル | TerraiOS |
Apple Health 連携 |
| Android | モバイル | terra-android |
Samsung Health, Health Connect |
| React Native | モバイル | terra-react |
クロスプラットフォームモバイル |
| Flutter | モバイル | terra_flutter |
クロスプラットフォームモバイル |
Python SDK
インストール
pip install terra-python
セットアップ
from terra import Terra, AsyncTerra
# 同期クライアント
client = Terra(
dev_id="botaniqalmedtech-testing-SjyfjtG33s",
api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)
# 非同期クライアント
async_client = AsyncTerra(
dev_id="botaniqalmedtech-testing-SjyfjtG33s",
api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)
設定オプション
from terra import Terra
client = Terra(
dev_id="...",
api_key="...",
timeout=60.0, # リクエストタイムアウト(秒)
max_retries=2, # 自動リトライ(デフォルト: 2)
)
完全なメソッドリファレンス
# 認証
client.authentication.generatewidgetsession(reference_id=..., auth_success_redirect_url=..., ...)
client.authentication.generateauthtoken() # パラメータなし、アカウントに対して生成
client.authentication.authenticateuser(resource=..., reference_id=...)
client.authentication.deauthenticateuser(user_id=...)
# ユーザー管理
client.user.getinfoforuserid(user_id=None, reference_id=None) # 単一ユーザーを取得
client.user.getalluserids(page=None, per_page=None) # 接続されているすべてのユーザーをリスト表示
client.user.getinfoformultipleuserids(user_ids=...) # ユーザー情報を一括取得
client.user.modifyuser(user_id=..., ...) # ユーザーを更新
# データ取得(.fetch() メソッドを使用)
client.activity.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.sleep.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.daily.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.body.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.nutrition.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.menstruation.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.athlete.fetch(user_id=...)
# 連携
client.integrations.fetch() # 基本リスト
client.integrations.detailedfetch() # 詳細情報付き
# データ書き込み(プロバイダー限定)
client.activity.write(user_id=..., data=...)
client.nutrition.write(user_id=..., data=...)
client.body.write(user_id=..., data=...)
非同期での使用
import asyncio
from terra import AsyncTerra
async def main():
client = AsyncTerra(dev_id="...", api_key="...")
# 並行リクエスト
activity, sleep, daily = await asyncio.gather(
client.activity.get(user_id, start, end),
client.sleep.get(user_id, start, end),
client.daily.get(user_id, start, end)
)
return activity.data, sleep.data, daily.data
asyncio.run(main())
エラー処理
from terra import Terra
from terra.core.api_error import ApiError
client = Terra(dev_id="...", api_key="...")
try:
data = client.activity.get(user_id="invalid", start_date=start, end_date=end)
except ApiError as e:
print(f"Status: {e.status_code}")
print(f"Message: {e.message}")
print(f"Body: {e.body}")
JavaScript/Node.js SDK
インストール
npm install terra-api
# or
yarn add terra-api
セットアップ
import { TerraClient } from "terra-api";
const client = new TerraClient({
apiKey: "_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc",
devId: "botaniqalmedtech-testing-SjyfjtG33s"
});
TypeScript サポート
import { TerraClient, TerraError } from "terra-api";
const client = new TerraClient({
apiKey: string,
devId: string,
timeout?: number,
maxRetries?: number
});
完全なメソッドリファレンス
// 認証
await client.authentication.generateWidgetSession({ referenceId, authSuccessRedirectUrl, ... });
await client.authentication.generateAuthToken({ referenceId });
await client.authentication.authenticateUser({ resource, referenceId });
await client.authentication.deauthenticateUser({ userId });
// ユーザー管理
await client.user.getUser({ userId });
await client.user.getSubscriptions();
// データ取得
await client.activity.get({ userId, startDate, endDate, toWebhook });
await client.sleep.get({ userId, startDate, endDate, toWebhook });
await client.daily.get({ userId, startDate, endDate, toWebhook });
await client.body.get({ userId, startDate, endDate, toWebhook });
await client.nutrition.get({ userId, startDate, endDate, toWebhook });
// 連携
await client.integrations.fetch();
エラー処理
import { TerraClient, TerraError } from "terra-api";
try {
const data = await client.activity.get({ userId: "...", startDate, endDate });
} catch (error) {
if (error instanceof TerraError) {
console.log(error.statusCode);
console.log(error.message);
console.log(error.body);
}
}
リクエストの中止
const controller = new AbortController();
const promise = client.activity.get(
{ userId, startDate, endDate },
{ abortSignal: controller.signal }
);
// 必要に応じてキャンセル
controller.abort();
iOS SDK (Swift)
インストール
Swift Package Manager:
https://github.com/tryterra/TerraiOS
CocoaPods:
pod 'TerraiOS'
セットアップ
import TerraiOS
class HealthManager {
func initialize() {
Terra.initTerra(
devId: "botaniqalmedtech-testing-SjyfjtG33s",
referenceId: getCurrentUserId()
)
}
func connectAppleHealth(token: String) {
Ter 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Terra SDK Integration
Complete SDK reference for Terra API integration across all platforms.
SDK Overview
| SDK | Platform | Package | Use Case |
|---|---|---|---|
| Python | Backend | terra-python |
Server-side API calls |
| JavaScript | Backend/Node | terra-api |
Node.js, Deno, Bun |
| iOS | Mobile | TerraiOS |
Apple Health integration |
| Android | Mobile | terra-android |
Samsung Health, Health Connect |
| React Native | Mobile | terra-react |
Cross-platform mobile |
| Flutter | Mobile | terra_flutter |
Cross-platform mobile |
Python SDK
Installation
pip install terra-python
Setup
from terra import Terra, AsyncTerra
# Synchronous client
client = Terra(
dev_id="botaniqalmedtech-testing-SjyfjtG33s",
api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)
# Async client
async_client = AsyncTerra(
dev_id="botaniqalmedtech-testing-SjyfjtG33s",
api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)
Configuration Options
from terra import Terra
client = Terra(
dev_id="...",
api_key="...",
timeout=60.0, # Request timeout in seconds
max_retries=2, # Automatic retries (default: 2)
)
Complete Method Reference
# Authentication
client.authentication.generatewidgetsession(reference_id=..., auth_success_redirect_url=..., ...)
client.authentication.generateauthtoken() # No params, generates for account
client.authentication.authenticateuser(resource=..., reference_id=...)
client.authentication.deauthenticateuser(user_id=...)
# User Management
client.user.getinfoforuserid(user_id=None, reference_id=None) # Get single user
client.user.getalluserids(page=None, per_page=None) # List all connected users
client.user.getinfoformultipleuserids(user_ids=...) # Bulk user info
client.user.modifyuser(user_id=..., ...) # Update user
# Data Retrieval (use .fetch() method)
client.activity.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.sleep.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.daily.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.body.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.nutrition.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.menstruation.fetch(user_id=..., start_date=..., end_date=..., to_webhook=False)
client.athlete.fetch(user_id=...)
# Integrations
client.integrations.fetch() # Basic list
client.integrations.detailedfetch() # With detailed info
# Data Writing (limited providers)
client.activity.write(user_id=..., data=...)
client.nutrition.write(user_id=..., data=...)
client.body.write(user_id=..., data=...)
Async Usage
import asyncio
from terra import AsyncTerra
async def main():
client = AsyncTerra(dev_id="...", api_key="...")
# Concurrent requests
activity, sleep, daily = await asyncio.gather(
client.activity.get(user_id, start, end),
client.sleep.get(user_id, start, end),
client.daily.get(user_id, start, end)
)
return activity.data, sleep.data, daily.data
asyncio.run(main())
Error Handling
from terra import Terra
from terra.core.api_error import ApiError
client = Terra(dev_id="...", api_key="...")
try:
data = client.activity.get(user_id="invalid", start_date=start, end_date=end)
except ApiError as e:
print(f"Status: {e.status_code}")
print(f"Message: {e.message}")
print(f"Body: {e.body}")
JavaScript/Node.js SDK
Installation
npm install terra-api
# or
yarn add terra-api
Setup
import { TerraClient } from "terra-api";
const client = new TerraClient({
apiKey: "_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc",
devId: "botaniqalmedtech-testing-SjyfjtG33s"
});
TypeScript Support
import { TerraClient, TerraError } from "terra-api";
const client = new TerraClient({
apiKey: string,
devId: string,
timeout?: number,
maxRetries?: number
});
Complete Method Reference
// Authentication
await client.authentication.generateWidgetSession({ referenceId, authSuccessRedirectUrl, ... });
await client.authentication.generateAuthToken({ referenceId });
await client.authentication.authenticateUser({ resource, referenceId });
await client.authentication.deauthenticateUser({ userId });
// User Management
await client.user.getUser({ userId });
await client.user.getSubscriptions();
// Data Retrieval
await client.activity.get({ userId, startDate, endDate, toWebhook });
await client.sleep.get({ userId, startDate, endDate, toWebhook });
await client.daily.get({ userId, startDate, endDate, toWebhook });
await client.body.get({ userId, startDate, endDate, toWebhook });
await client.nutrition.get({ userId, startDate, endDate, toWebhook });
// Integrations
await client.integrations.fetch();
Error Handling
import { TerraClient, TerraError } from "terra-api";
try {
const data = await client.activity.get({ userId: "...", startDate, endDate });
} catch (error) {
if (error instanceof TerraError) {
console.log(error.statusCode);
console.log(error.message);
console.log(error.body);
}
}
Abort Requests
const controller = new AbortController();
const promise = client.activity.get(
{ userId, startDate, endDate },
{ abortSignal: controller.signal }
);
// Cancel if needed
controller.abort();
iOS SDK (Swift)
Installation
Swift Package Manager:
https://github.com/tryterra/TerraiOS
CocoaPods:
pod 'TerraiOS'
Setup
import TerraiOS
class HealthManager {
func initialize() {
Terra.initTerra(
devId: "botaniqalmedtech-testing-SjyfjtG33s",
referenceId: getCurrentUserId()
)
}
func connectAppleHealth(token: String) {
Terra.initConnection(
type: Connections.APPLE_HEALTH,
token: token,
schedulerOn: true // Enable background sync
) { success, error in
if success {
print("Connected to Apple Health!")
} else {
print("Connection failed: \(error?.localizedDescription ?? "Unknown")")
}
}
}
}
Reading Data
import TerraiOS
// Get activity data
Terra.getActivity(
startDate: Calendar.current.date(byAdding: .day, value: -7, to: Date())!,
endDate: Date()
) { success, data, error in
if success, let activities = data {
for activity in activities {
print("Activity: \(activity.metadata.type)")
print("Calories: \(activity.calories_data.total_burned_calories)")
}
}
}
// Get sleep data
Terra.getSleep(startDate: startDate, endDate: endDate) { success, data, error in
// Handle sleep data
}
// Get daily data
Terra.getDaily(startDate: startDate, endDate: endDate) { success, data, error in
// Handle daily summaries
}
Writing Data (Apple Health)
// Post activity
Terra.postActivity(data: activityData) { success, error in
if success {
print("Activity posted to Apple Health")
}
}
// Post planned workout (appears in Workout app)
let workout = PlannedWorkout(
name: "Morning Run",
type: "running",
phases: [
WorkoutPhase(type: "warmup", duration: 300),
WorkoutPhase(type: "active", duration: 1800),
WorkoutPhase(type: "cooldown", duration: 300)
]
)
Terra.postPlannedWorkout(data: workout) { success, error in
// Workout now available on Apple Watch
}
Background Delivery
// Enable background delivery in AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions...) {
Terra.setUpBackgroundDelivery()
}
// Data syncs automatically in background when schedulerOn: true
Android SDK (Kotlin)
Installation
build.gradle:
dependencies {
implementation 'co.tryterra:terra-android:VERSION'
}
Requirements: minSDK 28 (Android 9.0+)
Setup
import co.tryterra.terra.Terra
import co.tryterra.terra.Connections
class HealthManager(private val context: Context) {
fun initialize() {
Terra.initTerra(
devId = "botaniqalmedtech-testing-SjyfjtG33s",
referenceId = getCurrentUserId(),
context = context
)
}
fun connectSamsungHealth(token: String) {
Terra.initConnection(
connection = Connections.SAMSUNG,
token = token,
context = context,
schedulerOn = true
) { success ->
if (success) {
println("Connected to Samsung Health!")
}
}
}
fun connectHealthConnect(token: String) {
Terra.initConnection(
connection = Connections.HEALTH_CONNECT,
token = token,
context = context,
schedulerOn = true
) { success ->
if (success) {
println("Connected to Health Connect!")
}
}
}
}
Reading Data
// Get activity
Terra.getActivity(startDate, endDate) { success, data ->
if (success) {
data?.forEach { activity ->
println("Activity: ${activity.metadata.type}")
println("Calories: ${activity.caloriesData.totalBurnedCalories}")
}
}
}
// Get sleep
Terra.getSleep(startDate, endDate) { success, data ->
// Handle sleep data
}
// Get daily
Terra.getDaily(startDate, endDate) { success, data ->
// Handle daily summaries
}
Permissions
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.BODY_SENSORS"/>
React Native SDK
Installation
npm install terra-react
# or
yarn add terra-react
# iOS: pod install
cd ios && pod install
Setup
import { Terra, Connections } from "terra-react";
// Initialize
Terra.initTerra(
"botaniqalmedtech-testing-SjyfjtG33s",
getCurrentUserId()
);
Connecting Sources
// Get auth token from your backend
const token = await fetchTerraToken();
// Connect (auto-detects platform)
const connection = Platform.OS === 'ios'
? Connections.APPLE_HEALTH
: Connections.HEALTH_CONNECT;
await Terra.initConnection(
connection,
token,
true // schedulerOn for background sync
);
Reading Data
import { Terra } from "terra-react";
// Get activity
const activities = await Terra.getActivity(startDate, endDate);
activities.forEach(activity => {
console.log(`Type: ${activity.metadata.type}`);
console.log(`Calories: ${activity.calories_data.total_burned_calories}`);
});
// Get sleep
const sleepData = await Terra.getSleep(startDate, endDate);
// Get daily
const dailyData = await Terra.getDaily(startDate, endDate);
// Get body
const bodyData = await Terra.getBody(startDate, endDate);
Writing Data
// Post activity
await Terra.postActivity(activityData);
// Post nutrition
await Terra.postNutrition(nutritionData);
// Post body metrics
await Terra.postBody(bodyData);
Flutter SDK
Installation
pubspec.yaml:
dependencies:
terra_flutter: ^VERSION
Setup
import 'package:terra_flutter/terra_flutter.dart';
class HealthManager {
late Terra terra;
void initialize() {
terra = Terra(
"botaniqalmedtech-testing-SjyfjtG33s",
getCurrentUserId()
);
}
Future<void> connectAppleHealth(String token) async {
await terra.initConnection(
Connections.APPLE_HEALTH,
token,
schedulerOn: true
);
}
}
Reading Data
// Get activity
final activities = await terra.getActivity(startDate, endDate);
for (var activity in activities) {
print("Type: ${activity.metadata.type}");
print("Calories: ${activity.caloriesData.totalBurnedCalories}");
}
// Get sleep
final sleepData = await terra.getSleep(startDate, endDate);
// Get daily
final dailyData = await terra.getDaily(startDate, endDate);
Writing Data
// Post activity
await terra.postActivity(activityData);
// Post nutrition
await terra.postNutrition(nutritionData);
Backend Token Generation
Mobile SDKs require backend token generation:
# Flask example
from flask import Flask, jsonify
from flask_login import login_required, current_user
from terra import Terra
app = Flask(__name__)
terra = Terra(dev_id="...", api_key="...")
@app.route("/api/terra/token", methods=["POST"])
@login_required
def get_terra_token():
"""Generate auth token for mobile SDK."""
response = terra.authentication.generateauthtoken(
reference_id=str(current_user.id)
)
return jsonify({"token": response.token})
Token Expiration: 180 seconds (3 minutes), one-time use.
SDK Comparison
| Feature | Python | JavaScript | iOS | Android | React Native | Flutter |
|---|---|---|---|---|---|---|
| Async support | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Auto retries | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Type safety | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Background sync | N/A | N/A | ✅ | ✅ | ✅ | ✅ |
| Write data | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
When to Use Each SDK
| Scenario | Recommended SDK |
|---|---|
| Backend API calls | Python or JavaScript |
| iOS app with Apple Health | iOS SDK (Swift) |
| Android app | Android SDK (Kotlin) |
| Cross-platform mobile | React Native or Flutter |
| Serverless (Lambda, etc.) | JavaScript |
| Data processing | Python (with async) |
Related Skills
- terra-auth: Credential management
- terra-connections: Connection flows
- terra-data: Data retrieval details
- terra-webhooks: Event handling