Agent skill

sleeptrack-be

This skill provides comprehensive backend REST API integration for Asleep sleep tracking platform. Use this skill when building server-side applications, API proxies for mobile apps, webhook event handlers, cross-platform backends (React Native, Flutter), analytics dashboards, or multi-tenant sleep tracking systems. Covers authentication, user management, session retrieval, statistics, webhook integration, and production-ready patterns with code examples in Python, Node.js, and curl.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/sleeptrack-be-asleep-ai-sleeptrack-skills

SKILL.md

Sleeptrack Backend API Integration

Overview

This skill provides comprehensive guidance for integrating the Asleep REST API into backend applications. It covers server-side user management, session data retrieval, statistics aggregation, webhook event handling, and production-ready patterns for building robust sleep tracking backends.

Use this skill when:

  • Building backend/server-side sleep tracking integrations
  • Creating API proxies for mobile applications
  • Implementing webhook handlers for real-time sleep data
  • Developing cross-platform backends (React Native, Flutter)
  • Building analytics dashboards and reporting systems
  • Creating multi-tenant sleep tracking applications
  • Integrating sleep data with other health platforms

Quick Start

1. Get Your API Key

  1. Sign up at https://dashboard.asleep.ai
  2. Generate an API key for your application
  3. Store securely in environment variables (never commit to version control)

2. Basic Authentication

All API requests require the x-api-key header:

curl:

bash
curl -X GET "https://api.asleep.ai/ai/v1/users/USER_ID" \
  -H "x-api-key: YOUR_API_KEY"

Python:

python
import requests

headers = {"x-api-key": "YOUR_API_KEY"}
response = requests.get(
    "https://api.asleep.ai/ai/v1/users/USER_ID",
    headers=headers
)

Node.js:

javascript
const axios = require('axios');

const response = await axios.get(
  'https://api.asleep.ai/ai/v1/users/USER_ID',
  {
    headers: { 'x-api-key': 'YOUR_API_KEY' }
  }
);

API Client Structure

Build a reusable API client to handle authentication, error handling, and common operations.

Key Components:

  • Base URL configuration (https://api.asleep.ai)
  • API key authentication in headers
  • Error handling for common HTTP status codes (401, 403, 404)
  • Request methods for all API endpoints
  • Session management with persistent connections

For complete implementations:

  • Python: See references/python_client_implementation.md
  • Node.js: See references/nodejs_client_implementation.md
  • REST API details: See references/rest_api_reference.md

Basic Client Structure:

python
class AsleepClient:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.asleep.ai"
        self.session = requests.Session()
        self.session.headers.update({"x-api-key": api_key})

    def _request(self, method: str, path: str, **kwargs):
        # Handle authentication and errors
        # See python_client_implementation.md for full code
        pass

User Management

Creating Users

Create users before tracking sleep. User IDs are managed by your application.

python
# Create user with metadata
user_id = client.create_user(metadata={
    "birth_year": 1990,
    "gender": "male",
    "height": 175.5,  # cm
    "weight": 70.0    # kg
})

Available Metadata Fields:

  • birth_year (Integer): Birth year
  • birth_month (Integer): 1-12
  • birth_day (Integer): 1-31
  • gender (String): male, female, non_binary, other, prefer_not_to_say
  • height (Float): Height in cm (0-300)
  • weight (Float): Weight in kg (0-1000)

Retrieving User Information

python
user_data = client.get_user(user_id)
# Returns: user_id, to_be_deleted status, last_session_info, metadata

Response includes:

  • User ID and deletion status
  • Last session information (if available)
  • User metadata (demographic information)

Deleting Users

Permanently removes user and all associated data (sessions, reports).

python
client.delete_user(user_id)

For detailed examples and response structures:

  • See references/rest_api_reference.md (User Management section)
  • See references/python_client_implementation.md or references/nodejs_client_implementation.md

Session Management

Retrieving Session Details

Get comprehensive sleep analysis for a specific session.

python
session = client.get_session(
    session_id="session123",
    user_id="user123",
    timezone="America/New_York"
)

# Access key metrics
print(f"Sleep efficiency: {session['stat']['sleep_efficiency']:.1f}%")
print(f"Total sleep time: {session['stat']['sleep_time']}")
print(f"Sleep stages: {session['session']['sleep_stages']}")

Sleep Stage Values:

  • -1: Unknown/No data
  • 0: Wake
  • 1: Light sleep
  • 2: Deep sleep
  • 3: REM sleep

Key Metrics:

  • sleep_efficiency: (Total sleep time / Time in bed) × 100%
  • sleep_latency: Time to fall asleep (seconds)
  • waso_count: Wake after sleep onset episodes
  • time_in_bed: Total time in bed (seconds)
  • time_in_sleep: Actual sleep time (seconds)
  • time_in_light/deep/rem: Stage durations (seconds)

Listing Sessions

Retrieve multiple sessions with date filtering and pagination.

python
sessions = client.list_sessions(
    user_id="user123",
    date_gte="2024-01-01",
    date_lte="2024-01-31",
    limit=50,
    order_by="DESC"
)

Pagination Example:

python
all_sessions = []
offset = 0
limit = 100

while True:
    result = client.list_sessions(
        user_id="user123",
        offset=offset,
        limit=limit
    )
    sessions = result['sleep_session_list']
    all_sessions.extend(sessions)

    if len(sessions) < limit:
        break
    offset += limit

Deleting Sessions

python
client.delete_session(session_id="session123", user_id="user123")

For detailed session data structures and examples:

  • See references/rest_api_reference.md (Session Management section)
  • See client implementation references for language-specific examples

Statistics and Analytics

Average Statistics

Get aggregated sleep metrics over a time period (max 100 days).

python
stats = client.get_average_stats(
    user_id="user123",
    start_date="2024-01-01",
    end_date="2024-01-31",
    timezone="UTC"
)

avg = stats['average_stats']
print(f"Average sleep time: {avg['sleep_time']}")
print(f"Average efficiency: {avg['sleep_efficiency']:.1f}%")
print(f"Light sleep ratio: {avg['light_ratio']:.1%}")
print(f"Number of sessions: {len(stats['slept_sessions'])}")

Returned Metrics:

  • Average sleep time, bedtime, wake time
  • Average sleep efficiency
  • Sleep stage ratios (light, deep, REM)
  • List of sessions included in calculation

For trend analysis and advanced analytics:

  • See references/python_client_implementation.md (Analytics section)
  • See references/rest_api_reference.md (Statistics section)

Webhook Integration

Webhooks enable real-time notifications for sleep session events.

Webhook Event Types

  1. INFERENCE_COMPLETE: Incremental sleep data during tracking (every 5-40 minutes)
  2. SESSION_COMPLETE: Final comprehensive sleep analysis when session ends

Setting Up Webhook Endpoint

Basic Structure:

python
@app.route('/asleep-webhook', methods=['POST'])
def asleep_webhook():
    # 1. Verify authentication (x-api-key header)
    # 2. Parse event data
    # 3. Handle event type (INFERENCE_COMPLETE or SESSION_COMPLETE)
    # 4. Process and store data
    # 5. Return 200 response
    pass

Key Implementation Points:

  • Verify x-api-key header matches your API key
  • Validate x-user-id header
  • Handle both INFERENCE_COMPLETE and SESSION_COMPLETE events
  • Implement idempotency (check if event already processed)
  • Process asynchronously for better performance
  • Return 200 status immediately

For complete webhook implementations:

  • Python (Flask): See references/webhook_implementation_guide.md
  • Node.js (Express): See references/webhook_implementation_guide.md
  • Webhook payloads: See references/webhook_reference.md

Webhook Best Practices

Idempotency: Check if webhook event was already processed to avoid duplicates.

Asynchronous Processing: Queue webhook events for background processing and respond immediately.

Error Handling: Return 200 even if processing fails internally to prevent retries.

For detailed patterns:

  • See references/webhook_implementation_guide.md
  • See references/production_patterns.md (Background Jobs section)

Common Backend Patterns

1. API Proxy for Mobile Apps

Create a backend proxy to:

  • Hide API keys from mobile clients
  • Add custom authentication
  • Implement business logic
  • Track usage and analytics

Key endpoints:

  • POST /api/users - Create Asleep user for authenticated app user
  • GET /api/sessions/{id} - Proxy session retrieval with auth
  • GET /api/sessions - List sessions with filtering
  • GET /api/statistics - Get aggregated statistics

For complete implementation:

  • See references/python_client_implementation.md (API Proxy section)

2. Analytics Dashboard Backend

Aggregate and analyze sleep data across multiple users:

  • Calculate comprehensive sleep scores
  • Generate weekly/monthly reports
  • Analyze cohort sleep patterns
  • Provide personalized insights

Key features:

  • Sleep score calculation (efficiency + consistency + duration)
  • Trend analysis over time
  • Multi-user aggregation
  • Report generation

For complete implementation:

  • See references/python_client_implementation.md (Analytics section)

3. Multi-Tenant Application

Manage sleep tracking for multiple organizations or teams:

  • Organization-level user management
  • Aggregated organization statistics
  • Role-based access control
  • Per-organization settings

For complete implementation:

  • See references/python_client_implementation.md (Multi-Tenant section)

Error Handling

Common Error Codes

  • 401 Unauthorized: Invalid API key
  • 403 Forbidden: Rate limit exceeded or insufficient permissions
  • 404 Not Found: Resource does not exist
  • 422 Unprocessable Entity: Invalid request parameters

Retry Logic with Exponential Backoff

python
def retry_with_exponential_backoff(func, max_retries=3, base_delay=1.0):
    for attempt in range(max_retries):
        try:
            return func()
        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 403 and "rate limit" in str(e):
                if attempt < max_retries - 1:
                    delay = min(base_delay * (2 ** attempt), 60.0)
                    time.sleep(delay)
                    continue
            raise

Custom Exception Classes

python
class AsleepAPIError(Exception):
    """Base exception for Asleep API errors"""
    pass

class RateLimitError(AsleepAPIError):
    """Rate limit exceeded"""
    pass

class ResourceNotFoundError(AsleepAPIError):
    """Resource not found"""
    pass

For comprehensive error handling:

  • See references/python_client_implementation.md or references/nodejs_client_implementation.md
  • See references/production_patterns.md (Error Recovery section)

Testing

Local Webhook Testing

Use ngrok to expose local server for webhook testing:

bash
# Start local server
python app.py  # or npm start

# Expose with ngrok
ngrok http 5000

# Use ngrok URL in webhook configuration
# Example: https://abc123.ngrok.io/asleep-webhook

Mock API Responses

python
@patch('requests.Session.request')
def test_create_user(mock_request):
    mock_response = Mock()
    mock_response.json.return_value = {
        "result": {"user_id": "test_user_123"}
    }
    mock_request.return_value = mock_response

    user_id = client.create_user()
    assert user_id == "test_user_123"

For complete testing examples:

  • See references/python_client_implementation.md (Testing section)

Production Best Practices

Security

  1. API Key Management:

    • Store in environment variables or secret management system
    • Never commit to version control
    • Rotate keys periodically
    • Use different keys for dev/staging/production
  2. Webhook Security:

    • Verify x-api-key header
    • Use HTTPS endpoints only
    • Implement rate limiting
    • Log all webhook attempts
  3. User Data Privacy:

    • Encrypt sensitive data at rest
    • Implement proper access controls
    • Handle data deletion requests
    • Comply with GDPR/CCPA

Performance

  1. Caching: Cache immutable session data
  2. Rate Limiting: Protect your backend from overload
  3. Connection Pooling: Reuse HTTP connections
  4. Batch Processing: Process multiple requests in parallel

Monitoring

  1. Logging: Structured logging for all API requests
  2. Metrics: Track request duration, error rates, throughput
  3. Health Checks: Implement /health, /ready, /live endpoints
  4. Alerting: Alert on error rate spikes or API failures

Deployment

  1. Configuration: Environment-based settings with validation
  2. Health Checks: Support Kubernetes liveness/readiness probes
  3. Graceful Shutdown: Handle termination signals properly
  4. Error Recovery: Circuit breaker pattern for API failures

For comprehensive production patterns:

  • Caching strategies: See references/production_patterns.md
  • Rate limiting: See references/production_patterns.md
  • Monitoring: See references/production_patterns.md
  • Deployment: See references/production_patterns.md

Resources

Reference Documentation

This skill includes comprehensive reference files:

  • references/python_client_implementation.md: Complete Python client with all methods, analytics classes, and examples
  • references/nodejs_client_implementation.md: Complete Node.js client with Express integration
  • references/webhook_implementation_guide.md: Full webhook handlers in Python and Node.js with best practices
  • references/rest_api_reference.md: Complete REST API endpoint documentation with request/response examples
  • references/webhook_reference.md: Webhook integration guide with payload structures
  • references/production_patterns.md: Caching, rate limiting, monitoring, deployment, and performance optimization

To access detailed information:

Read references/python_client_implementation.md
Read references/nodejs_client_implementation.md
Read references/webhook_implementation_guide.md
Read references/rest_api_reference.md
Read references/webhook_reference.md
Read references/production_patterns.md

Official Documentation

Related Skills

  • sleeptrack-foundation: Core concepts, authentication, data structures, and platform-agnostic patterns
  • sleeptrack-ios: iOS SDK integration for native iOS applications
  • sleeptrack-android: Android SDK integration for native Android applications

Support

For technical support and API issues:

  • Check Dashboard for API usage and status
  • Review error logs and response codes
  • Contact support through Asleep Dashboard

Didn't find tool you were looking for?

Be as detailed as possible for better results