SurgicalControl API Documentation

Complete guide for integrating Android apps with SurgicalControl authentication system

Overview

The SurgicalControl API provides authentication and usage tracking for your Android da Vinci robot control app. This API allows users to:

Base URL: https://api.mrpxtech.com/api

Authentication

The API uses JWT (JSON Web Tokens) for authentication. After successful login or signup, you'll receive a token that must be included in subsequent requests.

Note: Tokens expire after 7 days. Implement token refresh logic in your Android app.

Android Implementation

Store the JWT token securely in your Android app using SharedPreferences or EncryptedSharedPreferences:

// Store token securely SharedPreferences prefs = getSharedPreferences("SurgicalControl", MODE_PRIVATE); prefs.edit().putString("auth_token", token).apply(); // Retrieve token for API calls String token = prefs.getString("auth_token", null);

API Endpoints

POST
/auth/signup
Create a new user account

Request Body:

fullName string required

User's full name

email string required

User's email address (must be unique)

password string required

User's password (minimum 6 characters)

plan string required

Subscription plan: "basic", "professional", or "enterprise"

Success Response (201):

{ "message": "User created successfully", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": "uuid-here", "fullName": "John Doe", "email": "john@example.com", "plan": "basic" } }
POST
/auth/login
Authenticate existing user

Request Body:

email string required

User's email address

password string required

User's password

Success Response (200):

{ "message": "Login successful", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": "uuid-here", "fullName": "John Doe", "email": "john@example.com", "plan": "basic" } }
GET
/user/data
Get current user's data and usage statistics

Headers:

Authorization string required

Bearer token: "Bearer YOUR_JWT_TOKEN"

Success Response (200):

{ "fullName": "John Doe", "email": "john@example.com", "plan": "basic", "balance": 25.50, "monthlyUsage": 3600, "monthlyCost": 15.75 }
POST
/usage/start
Start a usage session (when user opens the app)

Headers:

Authorization string required

Bearer token: "Bearer YOUR_JWT_TOKEN"

Success Response (200):

{ "message": "Usage session started", "sessionId": "session-uuid-here" }
POST
/usage/stop
Stop a usage session (when user closes the app)

Headers:

Authorization string required

Bearer token: "Bearer YOUR_JWT_TOKEN"

Request Body:

duration integer required

Session duration in seconds

Success Response (200):

{ "message": "Usage session stopped", "duration": 1800, "cost": 2.70 }

Android Integration Guide

1. Add Dependencies

Add these dependencies to your build.gradle file:

dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' implementation 'androidx.security:security-crypto:1.1.0-alpha06' }

2. Create API Interface

public interface SurgicalControlAPI { @POST("auth/signup") Call signup(@Body SignupRequest request); @POST("auth/login") Call login(@Body LoginRequest request); @GET("user/data") Call getUserData(@Header("Authorization") String token); @POST("usage/start") Call startUsage(@Header("Authorization") String token); @POST("usage/stop") Call stopUsage(@Header("Authorization") String token, @Body StopUsageRequest request); }

3. Create Data Models

public class AuthResponse { public String message; public String token; public User user; } public class User { public String id; public String fullName; public String email; public String plan; } public class UserData { public String fullName; public String email; public String plan; public double balance; public int monthlyUsage; public double monthlyCost; }

Code Examples

Login Implementation

// Create Retrofit instance Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.mrpxtech.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); SurgicalControlAPI api = retrofit.create(SurgicalControlAPI.class); // Login request LoginRequest loginRequest = new LoginRequest("user@example.com", "password"); Call call = api.login(loginRequest); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { AuthResponse authResponse = response.body(); // Store token securely saveToken(authResponse.token); // Navigate to main activity startMainActivity(); } else { // Handle error showError("Login failed"); } } @Override public void onFailure(Call call, Throwable t) { showError("Network error"); } });

Usage Tracking

// In your MainActivity or service private long sessionStartTime; private String sessionId; @Override protected void onResume() { super.onResume(); startUsageTracking(); } @Override protected void onPause() { super.onPause(); stopUsageTracking(); } private void startUsageTracking() { sessionStartTime = System.currentTimeMillis(); String token = "Bearer " + getStoredToken(); Call call = api.startUsage(token); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { sessionId = response.body().sessionId; } } @Override public void onFailure(Call call, Throwable t) { // Handle error } }); } private void stopUsageTracking() { long duration = (System.currentTimeMillis() - sessionStartTime) / 1000; String token = "Bearer " + getStoredToken(); StopUsageRequest request = new StopUsageRequest(duration); Call call = api.stopUsage(token, request); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { // Update UI with usage data updateUsageDisplay(response.body()); } } @Override public void onFailure(Call call, Throwable t) { // Handle error } }); }

Error Handling

Common Error Responses

400 Bad Request

{ "message": "All fields are required" }

401 Unauthorized

{ "message": "Invalid credentials" }

403 Forbidden

{ "message": "Invalid or expired token" }

500 Internal Server Error

{ "message": "Internal server error" }
Important: Always implement proper error handling in your Android app. Check for network connectivity, handle timeouts, and provide user-friendly error messages.