Skip to content

Authentication

This guide explains how to authenticate with the Uptinio API. The API supports two authentication methods depending on your use case.

Authentication Methods

The Uptinio API supports two types of authentication:

  1. User Authentication Tokens - For frontend applications and user-specific operations
  2. Project API Tokens - For infrastructure monitoring and project-based operations

User Authentication Tokens

User authentication tokens are used for frontend applications (like React) and user-specific API operations. These tokens are obtained by logging in with user credentials.

Getting a User Authentication Token

Step 1: Register a User (if needed)

You can register a new user in two ways:

Option A: Standard Registration (Name, Email, Password)

bash
POST /api/v1/users
Content-Type: application/json

{
  "user": {
    "email": "user@example.com",
    "name": "John Doe",
    "password": "secure_password123",
    "password_confirmation": "secure_password123",
    "first_website": "https://example.com"
  }
}

Example with curl:

bash
curl -X POST "https://app.uptinio.com/api/v1/users" \
  -H "Content-Type: application/json" \
  -d '{
    "user": {
      "email": "user@example.com",
      "name": "John Doe",
      "password": "secure_password123",
      "password_confirmation": "secure_password123",
      "first_website": "https://example.com"
    }
  }'

Response:

json
{
  "message": "User created successfully",
  "user": {
    "email": "user@example.com",
    "name": "John Doe",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
}

Request Fields:

FieldTypeRequiredDescription
emailstringYesUser's email address
namestringYesUser's full name
passwordstringYesUser's password (minimum 6 characters)
password_confirmationstringYesPassword confirmation (must match password)
first_websitestringNoOptional URL for initial website monitoring

Option B: Quick Registration with Endpoint (Email Only)

This method creates a user with a provisional password and automatically sets up monitoring for a website:

bash
POST /api/v1/registrations
Content-Type: application/json

{
  "endpoint": "https://example.com",
  "email": "user@example.com"
}

Example with curl:

bash
curl -X POST "https://app.uptinio.com/api/v1/registrations" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "https://example.com",
    "email": "user@example.com"
  }'

Response:

json
{
  "message": "User registered successfully",
  "user": {
    "email": "user@example.com",
    "name": "User"
  },
  "network_monitor": {
    "uuid": "NM123456789",
    "url": "https://example.com"
  }
}

Note: With this method, a provisional password is generated and sent via email. You'll need to check your email for the password or reset it.

Registration Error Responses:

422 Unprocessable Entity - Validation errors:

json
{
  "errors": [
    "Email has already been taken",
    "Password is too short (minimum is 6 characters)",
    "Name can't be blank"
  ]
}

422 Unprocessable Entity - User already exists:

json
{
  "errors": "User already exist"
}

Step 2: Sign In

bash
POST /api/v1/auth/sign_in
Content-Type: application/json

{
  "user": {
    "email": "user@example.com",
    "password": "your_password"
  }
}

Response:

json
{
  "message": "Signed in successfully",
  "user": {
    "id": 1,
    "email": "user@example.com",
    "name": "User",
    "email_verified": true,
    "authentication_token": "abc123xyz..."
  }
}

Using User Authentication Tokens

Include the token in the Authorization header:

bash
curl -H "Authorization: Bearer YOUR_AUTHENTICATION_TOKEN" \
     https://app.uptinio.com/api/v1/auth/validate

JavaScript Example:

javascript
const response = await fetch('https://app.uptinio.com/api/v1/auth/validate', {
  headers: {
    'Authorization': `Bearer ${authenticationToken}`,
    'Content-Type': 'application/json'
  }
});

Endpoints Using User Authentication

User authentication tokens are used by default for most endpoints, including:

  • GET /api/v1/auth/validate - Validate token
  • DELETE /api/v1/auth/sign_out - Sign out
  • POST /api/v1/auth/google - Sign in with Google (exchange Google ID token for Uptinio token)
  • GET /api/v1/users/:id - Get user details
  • GET /api/v1/users/project_api_tokens - Get all projects with their API tokens
  • GET /api/v1/users/current_project_api_token - Get the current project's API token
  • And other user-specific endpoints

Token Validation

You can validate your token at any time:

bash
GET /api/v1/auth/validate
Authorization: Bearer YOUR_AUTHENTICATION_TOKEN

Valid Token Response:

json
{
  "valid": true,
  "user": {
    "id": 1,
    "email": "user@example.com",
    "name": "User",
    "email_verified": true
  }
}

Invalid Token Response:

json
{
  "valid": false,
  "errors": ["Invalid or expired token"]
}

Project API Tokens

Project API tokens are used for infrastructure monitoring, server metrics, and project-based operations. These tokens are generated in your Uptinio dashboard and are tied to a specific project.

Getting Your Project API Token

  1. Log in to your Uptinio dashboard
  2. Navigate to Settings > API Keys
  3. Click "Generate New API Key"
  4. Copy the key immediately (it won't be shown again)

Using Project API Tokens

Include your project API token in the Authorization header:

bash
curl -H "Authorization: Bearer YOUR_PROJECT_API_TOKEN" \
     https://app.uptinio.com/api/v1/network_monitors

JavaScript Example:

javascript
const response = await fetch('https://app.uptinio.com/api/v1/network_monitors', {
  headers: {
    'Authorization': `Bearer ${projectApiToken}`,
    'Content-Type': 'application/json'
  }
});

Endpoints Using Project API Tokens

Project API tokens are used for infrastructure and monitoring endpoints:

  • GET /api/v1/network_monitors - List monitors
  • POST /api/v1/network_monitors - Create monitor
  • GET /api/v1/incidents - List incidents
  • POST /api/v1/server_metrics - Submit metrics
  • GET /api/v1/servers - List servers
  • POST /api/v1/analysis - AI analysis
  • GET /api/v1/integrations - List integrations
  • GET /api/v1/accounts/usage - Usage statistics
  • GET /api/v1/general-status - Health check

Public Endpoints (No Authentication Required)

The following endpoints do not require authentication:

  • POST /api/v1/users - User registration (with name, email, and password)
  • POST /api/v1/registrations - Quick user registration (with endpoint monitoring)
  • POST /api/v1/auth/sign_in - User login

Security Best Practices

For User Authentication Tokens

  1. Store tokens securely

    • Use secure storage (localStorage, secure cookies, or secure keychain)
    • Never commit tokens to version control
    • Use environment variables in server-side applications
  2. Handle token expiration

    • Implement token refresh logic
    • Re-authenticate when tokens expire
    • Validate tokens before making requests
  3. Protect against XSS

    • Sanitize user input
    • Use Content Security Policy (CSP)
    • Avoid storing tokens in easily accessible locations

For Project API Tokens

  1. Never share your API key

    • Keep it secure and private
    • Don't commit it to version control
    • Use environment variables
  2. Rotate keys regularly

    • Generate new keys periodically
    • Revoke old keys when no longer needed
  3. Use different keys for different purposes

    • Separate keys for development and production
    • Different keys for different applications or services
  4. Limit key scope

    • Use project-specific tokens when possible
    • Revoke keys immediately if compromised

Rate Limiting

Both authentication methods are subject to rate limiting:

  • Standard plans: 100 requests per minute
  • Enterprise plans: 1000 requests per minute

Rate limit headers are included in responses:

  • X-RateLimit-Limit - Maximum requests allowed
  • X-RateLimit-Remaining - Remaining requests in current window
  • X-RateLimit-Reset - Time when the rate limit resets

Error Responses

Invalid or Missing Token

Status: 401 Unauthorized

json
{
  "errors": ["Invalid or expired token"]
}

or

json
{
  "errors": ["Missing authentication token"]
}

Invalid Project API Token

Status: 401 Unauthorized

json
{
  "error": "Unauthorized"
}

Banned User

Status: 401 Unauthorized or 403 Forbidden

json
{
  "errors": ["Invalid or expired token"]
}

Rate Limit Exceeded

Status: 429 Too Many Requests

json
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests"
  }
}

Email Verification

Email verification is required for users who sign up with email and password. After registration, users receive a 6-digit verification code via email. Once verified, users can create network monitors and integrations.

Note: Users who sign in with Google OAuth are automatically verified and don't need to verify their email.

Verify Email Address

Verify your email address using the verification code sent to your email.

http
POST /api/v1/email_verifications/verify
Authorization: Bearer YOUR_USER_AUTHENTICATION_TOKEN
Content-Type: application/json

Example with curl:

bash
curl -X POST "https://app.uptinio.com/api/v1/email_verifications/verify" \
  -H "Authorization: Bearer YOUR_USER_AUTHENTICATION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "123456"
  }'

JavaScript Example:

javascript
const response = await fetch('https://app.uptinio.com/api/v1/email_verifications/verify', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${authenticationToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    code: '123456'
  })
});

const data = await response.json();
if (data.success) {
  console.log('Email verified!');
}

Request Body

FieldTypeRequiredDescription
codestringYesThe 6-digit verification code sent to your email

Response

Success (200 OK) - Email verified:

json
{
  "success": true,
  "message": "Email verified successfully",
  "user": {
    "email": "user@example.com",
    "email_verified": true
  }
}

Success (200 OK) - Already verified:

json
{
  "success": true,
  "message": "Email is already verified",
  "user": {
    "email": "user@example.com",
    "email_verified": true
  }
}

Error Responses:

400 Bad Request - Missing verification code:

json
{
  "success": false,
  "error": "code_required",
  "message": "Verification code is required"
}

422 Unprocessable Entity - Invalid or expired code:

json
{
  "success": false,
  "error": "invalid_or_expired_code",
  "message": "Invalid or expired verification code. Please request a new code."
}

Resend Verification Code

Request a new verification code if you didn't receive it or if it expired.

http
POST /api/v1/email_verifications/resend
Authorization: Bearer YOUR_USER_AUTHENTICATION_TOKEN
Content-Type: application/json

Example with curl:

bash
curl -X POST "https://app.uptinio.com/api/v1/email_verifications/resend" \
  -H "Authorization: Bearer YOUR_USER_AUTHENTICATION_TOKEN" \
  -H "Content-Type: application/json"

JavaScript Example:

javascript
const response = await fetch('https://app.uptinio.com/api/v1/email_verifications/resend', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${authenticationToken}`,
    'Content-Type': 'application/json'
  }
});

const data = await response.json();
if (data.success) {
  console.log('New verification code sent!');
}

Response

Success (200 OK):

json
{
  "success": true,
  "message": "Verification code sent successfully",
  "user": {
    "email": "user@example.com",
    "email_verified": false
  }
}

Success (200 OK) - Already verified:

json
{
  "success": true,
  "message": "Email is already verified",
  "user": {
    "email": "user@example.com",
    "email_verified": true
  }
}

Error Responses:

429 Too Many Requests - Resend too soon:

json
{
  "success": false,
  "error": "resend_too_soon",
  "message": "Please wait 45 seconds before requesting a new code",
  "seconds_until_can_resend": 45
}

500 Internal Server Error - Failed to send:

json
{
  "success": false,
  "error": "send_failed",
  "message": "Failed to send verification code. Please try again later."
}

Verification Code Details

  • Verification codes are 6 digits (e.g., 123456)
  • Codes expire after 15 minutes
  • You can request a new code after 1 minute from the last request
  • Codes are sent to the email address associated with your account
  • Once verified, you can create network monitors and integrations

Why Email Verification is Required

Email verification is required to:

  • Create network monitors
  • Create integrations
  • Ensure account security
  • Prevent spam and abuse

Note: If you sign in with Google OAuth, your email is automatically verified and you can skip this step.

  • POST /api/v1/users - Register a new user (verification code is sent automatically)
  • POST /api/v1/auth/sign_in - Sign in to get authentication token
  • Monitor API Reference - Create monitors (requires verified email)
  • Integrations API Reference - Create integrations (requires verified email)

CORS Configuration

The API supports Cross-Origin Resource Sharing (CORS) for frontend applications. All API v1 endpoints accept requests from any origin with the following headers:

  • Authorization - For authentication tokens
  • Content-Type - For request body type
  • Accept - For response format

Preflight requests (OPTIONS) are automatically handled.


Next Steps