supabase
Handles the full Supabase workflow from schema changes to deployment, with built-in security guardrails that catch common traps like RLS...
terra-connections
Terra API device and provider connections. Use when connecting users to wearables (Fitbit, Garmin, Apple Health, Oura, WHOOP), managing user sessions, or handling disconnections.
Full skill instructions
Connect users to 150+ wearable devices and health data providers.
Pre-built UI, easiest integration:
from terra import Terra
client = Terra(
dev_id="botaniqalmedtech-testing-SjyfjtG33s",
api_key="_W7Pm-kAaIf1GA_Se21NnzCaFZjg3Izc"
)
# Generate widget session
response = client.authentication.generatewidgetsession(
reference_id="user_12345", # Your internal user ID
auth_success_redirect_url="https://app.botaniqal.com/success",
auth_failure_redirect_url="https://app.botaniqal.com/failure",
providers=["FITBIT", "GARMIN", "OURA"] # Optional: filter providers
)
widget_url = response.url
# Redirect user to widget_url
User Flow:
type: "auth"Build your own provider selection UI:
# Step 1: Get available integrations
integrations = client.integrations.fetch()
# Display provider list in your UI
# Step 2: User selects provider, generate auth URL
response = client.authentication.authenticateuser(
resource="FITBIT", # Provider selected by user
reference_id="user_12345"
)
auth_url = response.auth_url
# Open auth_url in browser (NOT WebView/iFrame!)
Important: Always open auth URLs in a real browser, not WebView or iFrame (OAuth security requirement).
These sources have no web API - mobile SDK required:
iOS (Swift) - Apple Health:
import TerraiOS
// 1. Get token from your backend
let token = await fetchTerraToken()
// 2. Initialize Terra
Terra.initTerra(devId: "botaniqalmedtech-testing-SjyfjtG33s", referenceId: "user_12345")
// 3. Connect to Apple Health
Terra.initConnection(
type: Connections.APPLE_HEALTH,
token: token,
schedulerOn: true // Enable background sync
) { success, error in
if success {
print("Connected to Apple Health!")
}
}
Android (Kotlin) - Samsung Health / Health Connect:
import co.tryterra.terra.Terra
// 1. Get token from your backend
val token = fetchTerraToken()
// 2. Initialize Terra (minSDK 28 required)
Terra.initTerra(
devId = "botaniqalmedtech-testing-SjyfjtG33s",
referenceId = "user_12345",
context = this
)
// 3. Connect to Samsung Health or Health Connect
Terra.initConnection(
connection = Connections.SAMSUNG, // or Connections.HEALTH_CONNECT
token = token,
context = this,
schedulerOn = true
) { success ->
if (success) {
println("Connected to Samsung Health!")
}
}
React Native:
import { Terra, Connections } from "terra-react";
// Initialize
Terra.initTerra("botaniqalmedtech-testing-SjyfjtG33s", "user_12345");
// Connect (iOS: Apple Health, Android: Samsung/Health Connect)
await Terra.initConnection(
Connections.APPLE_HEALTH,
authToken,
true // schedulerOn for background sync
);
connect-userConnect a user to a wearable provider.
def connect_user(
client: Terra,
reference_id: str,
provider: str = None,
success_url: str = None,
failure_url: str = None
) -> dict:
"""
Connect user to wearable provider.
Args:
reference_id: Your internal user ID
provider: Specific provider or None for widget with all
success_url: Redirect URL on success
failure_url: Redirect URL on failure
Returns:
dict with url and session_id
"""
if provider:
# Custom UI flow - specific provider
response = client.authentication.authenticateuser(
resource=provider,
reference_id=reference_id
)
return {"url": response.auth_url, "type": "direct"}
else:
# Widget flow - user selects provider
response = client.authentication.generatewidgetsession(
reference_id=reference_id,
auth_success_redirect_url=success_url,
auth_failure_redirect_url=failure_url
)
return {
"url": response.url,
"session_id": response.session_id,
"type": "widget"
}
disconnect-userDisconnect user and remove their data.
def disconnect_user(client: Terra, terra_user_id: str) -> bool:
"""
Disconnect user from Terra (revokes access, removes data).
Args:
terra_user_id: Terra's user ID (not your reference_id)
Returns:
bool: Success status
"""
response = client.authentication.deauthenticateuser(user_id=terra_user_id)
return response.success
get-user-infoGet user's connection status and details.
def get_user_info(client: Terra, terra_user_id: str) -> dict:
"""Get information about a connected user."""
response = client.user.getuser(user_id=terra_user_id)
return {
"user_id": response.user.user_id,
"provider": response.user.provider,
"reference_id": response.user.reference_id,
"scopes": response.user.scopes,
"last_webhook_update": response.user.last_webhook_update
}
list-connected-usersGet all users connected to your app.
def list_connected_users(client: Terra) -> list:
"""List all connected Terra users."""
response = client.user.getsubscriptions()
users = []
for user in response.users:
users.append({
"user_id": user.user_id,
"provider": user.provider,
"reference_id": user.reference_id,
"last_update": user.last_webhook_update
})
return users
get-users-by-referenceFind Terra users by your internal reference ID.
def get_users_by_reference(client: Terra, reference_id: str) -> list:
"""
Get all Terra users for a reference_id.
(One person can have multiple providers connected)
"""
response = client.user.getuser(reference_id=reference_id)
return response.users # List of TerraUser objects
One user can connect multiple wearables:
# User connects Fitbit
connect_user(client, "user_123", provider="FITBIT")
# Same user connects Oura Ring
connect_user(client, "user_123", provider="OURA")
# Get all connections for user
users = get_users_by_reference(client, "user_123")
# Returns: [TerraUser(provider="FITBIT"), TerraUser(provider="OURA")]
Each provider creates a separate Terra User ID, but all share the same reference_id.
schedulerOn: trueWhen user connects/disconnects, you receive webhooks:
Connection Success (type: "auth"):
{
"type": "auth",
"user": {
"user_id": "terra_abc123",
"provider": "FITBIT",
"reference_id": "user_12345"
},
"status": "authenticated"
}
Disconnection (type: "deauth"):
{
"type": "deauth",
"user": {
"user_id": "terra_abc123",
"provider": "FITBIT"
},
"status": "deauthenticated"
}
Connection Error (type: "connection_error"):
{
"type": "connection_error",
"user": {
"user_id": "terra_abc123",
"provider": "FITBIT"
},
"message": "Token refresh failed"
}
CREATE TABLE terra_connections (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id), -- Your user
terra_user_id VARCHAR(255) UNIQUE, -- Terra's user ID
provider VARCHAR(50), -- FITBIT, GARMIN, etc.
reference_id VARCHAR(255), -- Your reference ID
connected_at TIMESTAMP DEFAULT NOW(),
last_sync TIMESTAMP,
status VARCHAR(20) DEFAULT 'active', -- active, disconnected
scopes TEXT[] -- Granted permissions
);
CREATE INDEX idx_terra_user ON terra_connections(user_id);
CREATE INDEX idx_terra_reference ON terra_connections(reference_id);
Handles the full Supabase workflow from schema changes to deployment, with built-in security guardrails that catch common traps like RLS...
Comprehensive guides and best practices for Neon Serverless Postgres, covering setup, connection methods, authentication, and platform APIs.
Guide for setting up and using Firebase Authentication. Use this skill when the user's app requires user sign-in, user management, or secure data access using auth rules.
A skill to evaluate how secure Firestore security rules are. Use this when Firestore security rules are updated to ensure that the generated rules are extremely secure and robust.
Official skill for integrating Firebase AI Logic (Gemini API) into web applications. Covers setup, multimodal inference, structured output, and security.
Complete Better Auth server and client setup with database adapters, session management, plugins, and security configuration.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Complete Cloudflare platform integration with decision trees for compute, storage, AI, networking, security, and infrastructure-as-code.
Run Azure compliance and security audits with azqr plus Key Vault expiration checks. Covers best-practice assessment, resource review, policy/compliance validation, and security posture checks. WHEN: compliance scan, security audit, BEFORE running azqr (compliance cli tool), Azure best practices, Key Vault expiration check, expired certificates, expiring secrets, orphaned resources, compliance assessment.
Send, read, and manage Gmail messages, drafts, labels, and account settings.
Comprehensive website auditing across 230+ rules in 21 categories including SEO, performance, security, and accessibility.
Shared authentication, CLI syntax, and output formatting patterns for gws Google Workspace commands.
Discover your celebrity doppelgänger with StarByFace!
GeoSpy: Pricing, Features, FAQs, and Alternatives for AI Teams
Detect AI-generated voices to protect against audio fraud.
Ensure Your Content's Originality with AI Plagiarism Checker
Upscale images by 400% without quality loss
Protect your social media from copyright disputes
Accurately Detect AI-Generated Content with TheChecker.AI
Chrome extension that detects and flags AI-generated content